1. 程式人生 > >SQL server T-SQL存儲過程

SQL server T-SQL存儲過程

lB row 回滾事務 put spa 間接 var uid pan

簡介

存儲過程是由一些SQL語句和控制語句組成的被封裝起來的過程,它駐留在數據庫中,可以被客戶應用程序調用,也可以從另一個過程或觸發器調用。它的參數可以被傳遞和返回。與應用程序中的函數過程類似,存儲過程可以通過名字來調用,而且它們同樣有輸入參數和輸出參數

存儲過程的好處

1.由於數據庫執行動作時,是先編譯後執行的。然而存儲過程是一個編譯過的代碼塊,所以執行效率要比T-SQL語句高。

2.一個存儲過程在程序在網絡中交互時可以替代大堆的T-SQL語句,所以也能降低網絡的通信量,提高通信速率。

3.通過存儲過程能夠使沒有權限的用戶在控制之下間接地存取數據庫,從而確保數據的安全。

創建存儲過程

CREATE  PROC[EDURE]  存儲過程名
    @參數1  數據類型 = 默認值 OUTPUT,
    …… ,
    @參數n  數據類型 = 默認值 OUTPUT
    AS
    SQL語句
GO


1. 只返回單一記錄集的存儲過程
CREATE  PROC Newfolder
    AS
     select * from student    
 GO
exec Newfolder    --調用存儲過程

2.有返回值的存儲過程

create proc insetfile
@returnrow int
output as insert into F_HSZ(id,FID,UID) select NEWID(),‘1‘,‘2‘ set @returnrow=1 go --調用用帶有返回值的存儲過程 declare @returnrow int exec insetfile @returnrow OUTPUT print @returnrow

3.有輸入參數和輸出參數的存儲過程

create proc insetfile
@id varchar(100)
@returnrow int output
as
declare @Nid varchar(100)   --存儲過程聲明臨時變量
 select @Nid=id from Fole where id=@id
 insert into F_HSZ(id,FID,UID) select NEWID(),‘1‘,@Nid
set
@returnrow=1 go --調用帶有輸入輸出參數的存儲過程 declare @returnrow int exec insetfile ‘20‘, @returnrow OUTPUT print @returnrow

4.在存儲過程中使用事物

create proc insetfile
@retunrow int output
as
declare @error int =0 --事務中操作的錯誤記錄
declare @trancount int
 Set  NOCOUNT    ON;  --on表示不返回計數 SET NOCOUNT { ON | OFF }
 Set XACT_ABORT ON; --當執行事務時,如果出錯,會將transcation設置為uncommittable狀態

 print @@trancount
 begin try
    begin tran
   insert into F_HSZ(id,FID,UID) select NEWID(),‘1‘,‘22‘
   insert into F_HSZ(id,FID,UID) select NEWID(),‘1‘,2
   set @retunrow=1
    commit tran
    return @retunrow
 end try
 begin catch
   if xact_state()=-1
   begin
    rollback tran;  --回滾事務
   set @retunrow=0
   return @retunrow
   end
  end catch
set xact_abort off;
go

今天的存儲過程就到此為止了!技術分享圖片 晚安

SQL server T-SQL存儲過程