SqlServer触发器、存储过程和函数

---------------------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 ,
     @ sum  int  output
AS
BEGIN
     set  @ sum =@a+@b
END
 
--创建Return返回值存储过程
CREATE  PROCEDURE  PR_Sum2
     @a  int ,
     @b  int
AS
BEGIN
     Return  @a+@b
END
     
--执行存储过程获取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
(
     @a  int ,
     @b  int
)
returns  int
as
begin
     return  @a+@b
end
 
--新建内联表值函数
create  function  FUNC_UserTab_1
(
     @myId  int
)
returns  table
as
return  ( select  *  from  ST_User  where  ID<@myId)
 
--新建多语句表值函数
create  function  FUNC_UserTab_2
(
     @myId  int
)
returns  @t  table
(
     [ID] [ int ]  NOT  NULL ,
     [Oid] [ int ]  NOT  NULL ,
     [Login] [nvarchar](50)  NOT  NULL ,
     [Rtx] [nvarchar](4)  NOT  NULL ,
     [ Name ] [nvarchar](5)  NOT  NULL ,
     [ Password ] [nvarchar]( max )  NULL ,
     [State] [nvarchar](8)  NOT  NULL
)
as
begin
     insert  into  @t  select  *  from  ST_User  where  ID<@myId
     return
end
 
--调用表值函数
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
   存储过程一般用在实现复杂的功能,数据操纵方面。

猜你喜欢

转载自boonya.iteye.com/blog/1808165