- 3
- 0
- 约4.18千字
- 约 34页
- 2022-05-15 发布于北京
- 举报
8.8.1 存储过程;8.8.1.2 存储过程的创建与执行;8.8.1.2 存储过程的创建与执行;8.8.1.2 存储过程的创建与执行;存储过程的创建与执行;(5)使用带OUPUT参数的存储过程。
【例8.6】 创建一个存储过程do_insert,作用是向XSB表中插入一行数据。创建另外一个存储过程do_action,在其中调用第一个存储过程,并根据条件处理该行数据,处理后输出相应的信息。
第一个存储过程:
CREATE PROCEDURE dbo.do_insert
AS
INSERT INTO XSB VALUES(091201, 陶伟, 1, 1990-03-05, 软件工程,50, NULL);
;第二个存储过程:
CREATE PROCEDURE do_action @X bit, @STR CHAR(8) OUTPUT
AS
BEGIN
EXEC do_insert
IF @X=0
BEGIN
UPDATE XSB SET 姓名=刘英, 性别=0 WHERE 学号=091201
SET @STR=修改成功
END
ELSE IF @X=1
BEGIN
DELETE FROM XSB WHERE 学号=091201
SET @STR=删除成功
END
END
;接下来执行存储过程do_action来查看结果:
DECLARE @str char(8)
EXEC dbo.do_action 0, @str OUTPUT
SELECT @str
执行结果如下:
;存储过程的修改;存储过程的删除;界面方式操作存储过程;界面方式操作存储过程;界面方式操作存储过程;触发器;触发器的创建;【例8.10】 创建一个表table1,其中只有一列a。在表上创建一个触发器,每次插入操作时,将变量@str的值设为“TRIGGER IS WORKING”并显示。
CREATE TABLE table1(a int)
GO
CREATE TRIGGER table1_insert --触发器名
ON table1 AFTER INSERT --表名
AS
BEGIN
DECLARE @str char(50)
SET @str=TRIGGER IS WORKING
PRINT @str
END
;临时表inserted和deleted;向table1中插入一行数据:
INSERT INTO table1 VALUES(10)
执行结果如下:
;【例8.11】 创建insert触发器,当向sc表中插入一个学生的成绩时,将stu表中该学生的总学分加上添加的课程的学分。;创建DELETE触发器。
【例8.13】 在删除stu表中的一条学生记录时将sc表中该学生的相应记录也删除。(保证没有设置外键级联);创建UPDATE触发器。UPDATE触发器在对触发器表执行UPDATE语句后触发。在执行UPDATE触发器时,将触发器表的原记录保存到deleted临时表中,将修改后的记录保存到inserted临时表中。
【例8.12】 创???触发器,当修改stu表中的学号时,同时也要将sc表中的学号修改成相应的学号(假设stu表和sc表之间有定义外键约束)。;【例8.14】 在KCB表中创建UPDATE和DELETE触发器,当修改或删除KCB表中的“课程号”字段时,同时修改或删除CJB表中的该课程号。
CREATE TRIGGER kcb_trig
ON KCB AFTER UPDATE, DELETE
AS
BEGIN
IF (UPDATE(课程号))
UPDATE CJB SET 课程号=(SELECT 课程号 FROM inserted)
WHERE 课程号=(SELECT 课程号 FROM deleted)
ELSE
DELETE FROM CJB
WHERE 课程号 IN(SELECT 课程号 FROM deleted)
END
?
;(6)创建INSTEAD OF触发器。AFTER触发器是在触发语句执行后触发的,与AFTER触发器不同的是,INSTEAD OF触发器触发时只执行触发器内部的SQL语句,而不执行激活该触发器的SQL语句。一个表或视图中只能有一个INSTEAD OF触发器。
【例8.15】 创建表table2,值包含一列a,在表中创建INSTEAD OF INSERT触发器,当向表中插入记录时显示相应消息。
USE PXSCJ
GO
CREATE TABLE table2(a int)
GO
CREATE TRI
原创力文档

文档评论(0)