加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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?
   存储过程一般用在实现复杂的功能,数据操纵方面。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读