SQL Server 存储过程、函数、触发器的定义

一、定义存储过程

  当存储过程需要有返回值时,可以使用output关键字或return关键字。output和return不能同时使用

--定义
create procedure program
    --@parameter int 定义参数
    --@parameter int output 利用output关键字返回接口
as 
begin 
    print '';
    --return ''; 利用return关键字返回结构
end
--调用 execute 存储过程名 参数
execute program
--赋值的方式调用
declare @cc varchar(10)
execute @cc = program

二、定义函数

  1. 标量值函数:

    返回一个确定类型的标量值,例如:int,char,bit等

--创建标量值函数
create function func_1(@func_parameter_1 int,@func_parameter_2 int)
returns int
as 
begin 
    return 1
end

  2. 表值函数

    内联表值函数和多语句表值函数,都叫做表值函数,只是在定义返回值时,多语句确定了返回表的字段

--内联表值函数
create function func_table(@parameter_id varchar(36))
returns table
as
return select ID,Name from Members where ID = @parameter_id
go
--多语句表值函数
create function func_table1(@parameter_id varchar(36))
returns @tab_1 table(
    ID varchar(36),
    Name varchar(10)
)
as
begin
    insert into @tab_1 select ID,Name from Members
    return
end

  3.调用函数

    在存储过程中调用函数时,需要带上“dbo.” 看看是那个数据库的。表值函数也可以用“insert into ……select ‘函数’ ”赋值给表变量或临时表等

-- 标量函数
declare @params varchar(100)
select @params = dbo.func_1(1,2);
-- 表值函数
select * from func_3('parameter_varchar');
select @params = Name from func_table('parameter_varchar');

三、触发器

--基本语法
create trigger Trigger_Name
on TableName for type --type:insert,update,delete 
as
--执行逻辑

  1. insert 定义触发器并获取当前值

create trigger Member_Inserts
on Member for insert
as
declare @id varchar(36)
select @id = id from inserted;
insert into Member(ID,Sex) values(@id+'insert',0);

  2. update 触发器

  update 触发器获取修改前的值和修改后的值。update操作等于先删除记录,再插入新的记录

create trigger Member_Updates
on Member for update
as
declare @idnew varchar(36);
declare @idold varchar(36);
select @idnew = id from inserted;--inserted在修改时存放的新值的临时表
select @idold = id from deleted;--deleted在修改时存放的旧值的临时表
insert into Member(ID,Sex) values(@idnew+'new',0);
insert into Member(ID,Sex) values(@idold+'old',0);

  3.delete 触发器

create trigger Member_Deletes
on Members for delete
as
declare @idold varchar(36);
select @idold = id from deleted;--deleted在修改时存放的旧值的临时表
insert into Members(ID,CreateTime,Author,Status) values(NEWID(),GETDATE(),@idold,0)
原文地址:https://www.cnblogs.com/haosit/p/10766538.html