SQL Server存储过程与触发器

版权声明:本文为博主原创文章,转载请注明出处: https://blog.csdn.net/weixin_43720095/article/details/84330042

存储过程

存储过程是SQL Server服务器上一组预编译的Transact-SQL语句,用于完成某项任务,它可以接受参数、返回状态值和参数值,并且可以嵌套调用。

SQL Server存储过程的类型包括:

  1. 系统存储过程:

由系统提供的存储过程,主要存储在master数据库中并以sp_为前缀,它从系统表中获取信息,从而为系统管理员管理SQL Server提供支持

  1. 用户定义存储过程:

由用户创建并能完成某一特定功能(例如查询用户所需数据信息)的存储过程。它处于用户创建的数据库中,存储过程名前没有前缀sp_。

  1. 临时存储过程

临时存储过程与临时表类似,分为局部临时存储过程和全局临时存储过程,且可以分别向该过程名称前面添加“#”或“##”前缀表示。“#”表示本地临时存储过程,“##”表示全局临时存储过程。使用临时存储过程必须创建本地连接,当SQL Server关闭后,这些临时存储过程将自动被删除。

  1. 扩展存储过程

SQL Server可以动态装载和执行的动态链接库(DLL)。当扩展存储过程加载到SQL Server中,它的使用方法与系统存储过程一样。扩展存储过程只能添加到master数据库中,其前缀是xp_。

SQL Server的存储过程可实现以下功能:

  • 接收输入参数并以输出参数的形式为调用过程或批处理返回多个值。
  • 包含执行数据库操作的编程语句,包括调用其他过程。
  • 为调用过程或批处理返回一个状态值,以表示成功或失败(及失败原因)。

存储过程优点

模块化编程;快速执行;减少网络通信量;提供安全机制;保证操作一致性。

存储过程的创建与使用(语法)

创建存储过程(语句创建)

CREATE PROC[EDURE] procedure_name [; number ]
[{@parameter data_type }
 [VARYING] [=default] [OUTPUT]] [, ...n ] 
[WITH
 { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION } ] 
[ FOR REPLICATION ] 
AS sql_statement [,...n ]

执行存储过程

[[EXEC[UTE]]
 {[@return_status=]
  procedure_name [;number]|@procedure_name_var} [[@parameter=]{value|@variable
  [OUTPUT]|[DEFAULT]]
 [ ,...n ] 
[WITH RECOMPILE ]

修改存储过程

ALTER PROC[EDURE ] procedure_name [ ; number ]
[{@parameter data_type}
[VARYING][=default] [OUTPUT]] [ ,...n ] 
[WITH { RECOMPILE | ENCRYPTION | RECOMPILE, ENCRYPTION}]
[FOR REPLICATION ] 
AS sql_statement [ ...n ]

删除存储过程

DROP PROCEDURE {procedure_name} [ ,...n ]

触发器

触发器是一种特殊类型的存储过程。主要是通过事件进行触发而被执行的,而存储过程可以通过过程名字直接调用。当对某一表进行UPDATE、INSERT、DELETE操作时,SQL Server就会自动执行触发器所定义的SQL语句,从而确保对数据的处理必须符合由这些SQL语句所定义的规则。

触发器的主要作用就是能够实现由主键和外键所不能保证的参照完整性和数据的一致性。

创建触发器

CREATE TRIGGER trigger_name 
ON {table_name | view } 
[ WITH ENCRYPTION ] 
{ FOR | AFTER | INSTEAD OF } 
{ [ INSERT ] [ , ] [ UPDATE ] [ , ] [ DELETE ]}
AS sql_statement [ ... n ]

修改触发器

ALTER TRIGGER trigger_name 
ON {table | view} 
[WITH ENCRYPTION] 
{FOR | AFTER | INSTEAD OF}
{[DELETE] [ , ] [ INSERT ] [ , ] [ UPDATE ] } 
AS sql_statement [ ...n ]

删除触发器

DROP TRIGGER trigger_name [ , ...n ]

猜你喜欢

转载自blog.csdn.net/weixin_43720095/article/details/84330042