SQL server T-SQL存儲過程
阿新 • • 發佈:2018-05-12
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 intoutput 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存儲過程