1 存儲過程 2 3 創建存儲過程 4 5 use pubs --pubs為數據庫 6 7 go 8 9 create procedure MyPRO --procedure為創建存儲過程關鍵字,也可以簡寫proc,MyPRO為存儲過程名 10 11 as 12 13 select * from authors 14 15 --執行存儲過程 16 17 exec mypro --exec表示執行存儲過程 18 19 創建有參存儲過程 20 21 22 23 create proc sp_select 24 25 @cid int, 26 27 @str nvarchar(20) output -- output表示出參,沒有默認進參 28 29 as 30 31 select @str=name from c where id=@cid 32 33 34 35 執行存儲過程 36 37 declare @str nvarchar(20) --declare表示定義變量 38 39 exec sp_select 4 ,@str output 40 41 print @str 42 43 帶事務的存儲過程 44 45 存儲過程中使用事務 46 47 存儲過程中使用事務的簡單語法 48 49 在存儲過程中使用事務時非常重要的,使用數據可以保持數據的關聯完整性,在Sql server存儲過程中使用事務也很簡單,用一個例子來說明它的語法格式: 50 51 52 53 1、事務 存儲過程使用try…catch捕獲錯誤 54 55 Create Procedure sp_cunchuguocheng 56 57 @aname nvarchar(20),--后面一定標大小,默認為 58 59 @bstu nvarchar(20), 60 61 @bkm nvarchar(20), 62 63 @bcj nvarchar(20), 64 65 @cid int, 66 67 @cname nvarchar(20) 68 69 AS 70 71 BEGIN 72 73 begin transaction 74 75 begin try 76 77 insert into a (name)values(@aname) 78 79 insert into b (stuid,km,cj)values(@bstu,@bkm,@bcj) 80 81 insert into c(id,name) values(@cid,@cname) 82 83 commit transaction 84 85 end try 86 87 begin catch 88 89 print '錯誤' 90 91 rollback transaction 92 93 end catch 94 95 end 96 97 GO exec st_insert '8','aaa','aaa','6','aaa'--存儲過程的使用方法 98 99 100 101 2、set XACT_ABORT ON 事務 102 103 Create Procedure sp_cunchuguocheng 104 105 @aname nvarchar(20),--后面一定標大小,默認為 106 107 @bstu nvarchar(20), 108 109 @bkm nvarchar(20), 110 111 @bcj nvarchar(20), 112 113 @cid int, 114 115 @cname nvarchar(20) 116 117 AS 118 119 BEGIN 120 121 set Nocount on --當SET NOCOUNT 為ON 時,不返回計數(計數表示受Transact-SQL 語句影響的行數,例如在Sql server查詢分析器中執行一個delete操作后,下方窗口會提示()Rows Affected)。當 SET NOCOUNT 為OFF 時,返回計數,我們應該在存儲過程的頭部加上SET NOCOUNT ON 這樣的話,在退出存儲過程的時候加上SET NOCOUNT OFF這樣的話,以達到優化存儲過程的目的。 122 123 set XACT_ABORT ON --使用存儲過程執行事物,需要開啟XACT_ABORT參數(默認值為Off),將該參數設置為On,表示當執行事務時,如果出錯,會將transcation設置為uncommittable狀態,那么在語句塊批處理結束后將回滾所有操作;如果該參數設置為Off,表示當執行事務時,如果出錯,出錯的語句將不會執行,其他正確的操作繼續執行。 124 125 begin transaction --事務開始 126 127 insert into a (name)values(@aname) 128 129 insert into b (stuid,km,cj)values(@bstu,@bkm,@bcj) 130 131 insert into c(id,name) values(@cid,@cname) 132 133 commit transaction --提交事務 134 135 end 136 137 GO 138 139 exec sp_cunchuguocheng '111','111','111','111',5,'111' 140 141 3事務內設置保存點 142 143 Create Procedure MyProcedure 144 145 AS 146 147 Begin 148 149 Set NOCOUNT ON; 150 151 Set XACT_ABORT ON; 152 153 begin tran ok --開始一個事務OK 154 155 delete from rxqz where qz= 'rx015 ' --刪除數據 156 157 save tran bcd --保存一個事務點命名為bcd 158 159 update sz set name='李麗s' where name= '李麗'--修改數據 160 161 if @@error<>0 --判斷修改數據有沒有出錯 162 163 begin --如果出錯 164 165 rollback tran bcd -- 回滾事務到BCD 的還原點 166 167 commit tran ok --提交事務 168 169 end 170 171 else --沒有出錯 172 173 commit tran ok --提交事務 174 175 End 176 177 鏈接 178 179 轉載連接:http://www.cnblogs.com/RascallySnake/archive/2010/05/17/1737298.html(部分內容為轉載) 180 181 刪除存儲過程 182 183 drop proc sp_select 184 185 修改存儲過程 186 187 alter procedure mypro 188 189 as 190 191 select au_lname,au_fname from authors
轉載:http://blog.sina.com.cn/s/blog_66f673740101oy67.html
