一、定義存儲過程
當存儲過程需要有返回值時,可以使用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)