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)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM