SqlServer触发器、存储过程和函数
发布时间:2020-12-12 14:09:06 所属栏目:MsSql教程 来源:网络整理
导读:--------------------- sqlserver-触发器? -------------? 触发器中的临时表:? Inserted? 存放进行insert和update 操作后的数据? Deleted? 存放进行delete 和update操作前的数据? --创建触发器? Create? trigger? User_OnUpdate? ???? On? ST_User? ???? fo
---------------------
sqlserver-触发器?
-------------?
触发器中的临时表:? Inserted? 存放进行insert和update 操作后的数据? Deleted? 存放进行delete 和update操作前的数据? --创建触发器? Create? trigger? User_OnUpdate? ???? On? ST_User? ???? for? Update? As? ???? declare? @msg nvarchar(50)? ???? --@msg记录修改情况? ???? select? @msg = N '姓名从“'? + Deleted. Name? + N '”修改为“'? + Inserted. Name? +? '”'? from Inserted,Deleted? ???? --插入日志表? ???? insert? into? [LOG](MSG) values (@msg)? ?????? --删除触发器? drop? trigger? User_OnUpdate? ----------------- 存储过程语法 ----------------------? --创建带output参数的存储过程? CREATE? PROCEDURE? PR_Sum? ???? @a? int,? ???? @b? int,sans-serif; font-size:14px; line-height:25.200000762939453px">???? @ sum? int? output? AS? BEGIN? ???? set? @ sum =@a+@b? END? ?? --创建Return返回值存储过程? CREATE? PROCEDURE? PR_Sum2? ???? @b? int? ???? Return? @a+@b? --执行存储过程获取output型返回值? declare? @mysum? int? execute? PR_Sum 1,2,@mysum? output? print @mysum? --执行存储过程获取Return型返回值? declare? @mysum2? int? execute? @mysum2= PR_Sum2 1,2? print @mysum2---? ------------------- 自定义函数 -----------------------? --函数的分类:? 1)标量值函数? 2)表值函数? a:内联表值函数? b:多语句表值函数? 3)系统函数? --新建标量值函数? create? function? FUNC_Sum1? (? )? returns? int? as? begin? ???? return? @a+@b? end? --新建内联表值函数? create? function? FUNC_UserTab_1? ???? @myId? int? returns? table? return? ( select? *? from? ST_User? where? ID<@myId)? --新建多语句表值函数? create? function? FUNC_UserTab_2? returns? @t? table? ???? [ID] [ int ]? NOT? NULL,sans-serif; font-size:14px; line-height:25.200000762939453px">???? [Oid] [ int ]? NOT? NULL,sans-serif; font-size:14px; line-height:25.200000762939453px">???? [Login] [nvarchar](50)? NOT? NULL,sans-serif; font-size:14px; line-height:25.200000762939453px">???? [Rtx] [nvarchar](4)? NOT? NULL,sans-serif; font-size:14px; line-height:25.200000762939453px">???? [ Name ] [nvarchar](5)? NOT? NULL,sans-serif; font-size:14px; line-height:25.200000762939453px">???? [ Password ] [nvarchar]( max )? NULL,sans-serif; font-size:14px; line-height:25.200000762939453px">???? [State] [nvarchar](8)? NOT? NULL? ???? insert? into? @t? select? *? from? ST_User? where? ID<@myId? ???? return? --调用表值函数? select? *? from? dbo.FUNC_UserTab_1(15)? --调用标量值函数? declare? @s? int? set? @s=dbo.FUNC_Sum1(100,50)? print @s? --删除标量值函数? drop? function? FUNC_Sum1? 自定义函数与存储过程的区别 --------------------? --自定义函数:? 1. 可以返回表变量? 2. 限制颇多,包括? 不能使用output参数;? 不能用临时表;? 函数内部的操作不能影响到外部环境;? 不能通过select返回结果集;? 不能update,delete,数据库表;? 3. 必须return 一个标量值或表变量? 自定义函数一般用在复用度高,功能简单单一,争对性强的地方。? --存储过程? 1. 不能返回表变量? 2. 限制少,可以执行对数据库表的操作,可以返回数据集? 3. 可以return一个标量值,也可以省略return? 存储过程一般用在实现复杂的功能,数据操纵方面。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |