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)