SQL Server数据库:存储过程与触发器

存储过程

存储过程是独立于数据库之外的数据库对象,是SQL Server服务器上一组预编译的Transact-SQL语句,用于完成某项任务,它可以接收参数、输出参数、返回单个或多个结果集、返回状态值和参数值。存储过程独立于程序源代码,可单独修改。

创建存储过程

CREATE PROCEDURE 存储过程名
	[@变量名 数据类型] 
   [ = 默认值 ]
   [WITH ENCRYPTION|RECOMPILE] 	
   [FOR REPLICATION]	
as
	<sql语句>
  • WITH ENCRYPTION:存储过程加密,任何人都无法查看存储过程定义。WITH RECOMPILE:该过程在运行时编译
  • FOR REPLICATION:指定不能再订阅服务器上执行为复制创建的存储过程。
  • SQL语句:存储过程要执行的操作,但不能使用CREATE DEFAULT / CREATE TRIGGER / CREATE PROCEDURE / CREATE VIEW / CREATE RULE

示例:

use Student  /*指定数据库,创建的存储过程会保存在数据库文件中*/
CREATE PROCEDURE cjjicx
	@name varchar(50)
	WITH ENCRYPTION    --加密
as
	select sno from S where sname=@name
go  /*go作为批处理结束标志*/

执行存储过程

EXEC | EXECUTE
    [@返回状态= ] [schema_name.] 存储过程名
    [@形参 = ] [value]
    WITH RECOMPILE]

示例:

use Student
exec cjjicx @name='小明'
go /* 批处理结束标志 */

修改存储过程

ALTER PROCEDURE 存储过程名
   [@变量名 数据类型] 
   [ = 默认值 ]
   [WITH ENCRYPTION] 	
   [FOR REPLICATION]	
as
	<sql语句>

删除存储过程

DROP PROCEDURE 存储过程名

查看存储过程定义

  • 显示存储过程的参数及数据类型:sp_help 存储过程名
  • 显示存储过程源代码:sp_helptext 存储过程名
  • 显示与存储过程相关的数据库对象:sp_depends ’ 存储过程名 ’
  • 显示当前数据库中存储过程列表:sp_stored_prodedure ’ 存储过程名 ’

示例:

use Student
sp_helptext cjjicx

重命名存储过程

SP_RENAME 原存储过程名 , 新存储过程名

示例:

use Student
SP_RENAME cjjicx,cjjicx2 --将存储过程cjjicx更名为cjjicx2
go

触发器

触发器是特殊的存储过程,它也定义了一组SQL语句,用于完成某项任务。存储过程的执行是通过过程名字直接调用,而触发器是通过事件(如insert,update)进行触发而被执行

创建触发器

CREATE  TRIGGER  触发器名  ON  表名
    [WITH ENCRYPTION]  --文本加密
    {FOR | AFTER | INSTESD OF} 
        [delete][,insert][,update]
as
[SQL语句]
  • 触发器名不能以 # 或 ## 开头
  • 视图只能被INSTEAD OF触发器引用
  • AFTER:指定触发器只有在SQL所有操作以及所有引用级联操作和约束条件成功完成过后才触发。FOR:与AFTER等价。不能在视图上定义AFTER触发器。
  • SQL语句:多于一个语句时用begin和end包括

示例:

/*该触发器的作用是:当用户向SC表中插入记录时,如果插入了在S表中没有的学生学号sno,
则提示用户不能插入记录,否则提示记录插入成功。
*/
use Student
CREATE TRIGGER insert_xh on SC
	AFTER INSERT
as
begin
	if(exists(select * from inserted join S on inserted.sno=S.sno))
	begin
		rollback tran   /*取消insert操作*/
		select '不能插入记录'
	end
	if(not exists(select * from inserted join S on inserted.sno=S.sno))
	begin
		select '插入记录成功'
	end
end
go	

修改触发器

ALTER TRIGGER  触发器名  ON 表名|视图
	[WITH ENCRYPTION]
	{FOR | AFTER | INSTESD OF} 
        [delete][,insert][,update]
as
	[SQL语句]

删除触发器

DROP TRIGGER 触发器名

重命名触发器

SP_RENAME  原触发器名 , 新触发器名

本文章为作者的数据库实验报告总结,如有不当之处请大佬们批评!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晚风也很浪漫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值