实验八 用户自定义函数和触发器

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'

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值