1.回标量值的用户定义函数 RectangleArea:输入矩形的长和宽就能计算矩形的面积。自选2种实例调用该函数。 CREATE FUNCTION RectangleArea(@length float,@width float) RETURNS float AS BEGIN DECLARE @square float SET @square=@length*@width RETURN @square END GO SELECT dbo.RectangleArea(3.2,4.6); SELECT dbo.RectangleArea(3,4); 2.一个用户自定义函数(内嵌表值函数),功能为产生某个系的学生选修信息,内容为学号,姓名,课程名,成绩。调用这个函数,显示信息系有选课学生的信息。 CREATE FUNCTION stuInfo(@psdept varchar(20)) RETURNS TABLE AS RETURN ( SELECT Student.Sno 学号,Student.Sname 姓名,Course.Cname 课程名,SC.Grade 成绩 FROM Student,SC,Course WHERE Student.Sdept=@psdept AND Student.Sno=SC.Sno AND Course.Cno=SC.Cno ) GO SELECT * FROM dbo.stuInfo('CS'); 3.一个用户自定义函数,功能为产生一张有关学生成绩统计的报表。该报表显示每一门课程的课程号、课程名、选修人数、本门最高分、最低分和平均分。调用这个函数,生成相应的报表并给用户浏览。(多语句表值函数) CREATE FUNCTION stuForm() RETURNS TABLE AS RETURN ( SELECT SC.Cno 课程号,Course.Cname 课程名,COUNT(*) 选修人数,MAX(Grade) 最高分,MIN(Grade) 最低分,AVG(Grade) 平均分 FROM SC,Course WHERE SC.Cno=Course.Cno GROUP BY SC.Cno,Course.Cname ) GO SELECT * FROM dbo.stuForm(); 4. 创建一个作用在P表上的触发器P_checks,确保用户在插入或更新P表的WEIGHT值时,所提供的WEIGHT值介于20与40之间,否则给出错误提示并回滚此操作。请测试该触发器,测试方法自定。 CREATE TRIGGER P_checks ON P FOR INSERT AS DECLARE @pweight int SELECT @pweight=WEIGHT FROM inserted IF @pweight>=20 AND @pweight<=40 PRINT '插入成功' ELSE BEGIN PRINT '插入失败' ROLLBACK TRANSACTION END GO INSERT INTO P VALUES ('P7','螺母','蓝',15); 5. 创建一个作用在J表上的触发器J_Update,禁止同时修改项目的名称和所在城市,并进行相应的错误提示。请测试该触发器。测试方法自定。 CREATE TRIGGER J_Update ON J FOR UPDATE AS DECLARE @pj_name varchar(20),@pj_city varchar(20) DECLARE @pj_name_next varchar(20),@pj_city_next varchar(20) SELECT @pj_name=JNAME,@pj_city=CITY FROM deleted SELECT @pj_name_next=JNAME,@pj_city_next=CITY FROM inserted IF(@pj_name<>@pj_name_next AND @pj_city=@pj_city_next) OR (@pj_name=@pj_name_next AND @pj_city<>@pj_city_next) PRINT '更新成功' ELSE BEGIN PRINT '禁止同时修改项目的名称和所在城市' ROLLBACK TRANSACTION END GO UPDATE J SET JNAME='三',CITY='北' WHERE JNO='J1' |
实验八 用户自定义函数和触发器
最新推荐文章于 2022-09-05 14:09:56 发布