第 5 章 事務和遊標
事務:就是由若干條T-SQL語句組成的作為單個邏輯工作單元執行的一系列操作,這些操作作為一個整體使用,要麼全部執行完成,要麼全部撤銷。 事務是一個不可分割的工作邏輯單元。
事務的執行方式分為三種:
1.顯示事務:即有明確的開始(begin),結束(commit)以及撤銷(rollback);
2.自動提交事務:對資料進行增刪改等操作,如果出現錯誤,操作將會被自動取消;
3.隱式事務:當事務提交或回滾後,自動開始的事務
遊標:是一種能從包括多條資料記錄的結果集中每次提取一條記錄的機制
使用遊標可以實現:
1. 允許定位到結果集中的特定行
2. 從結果集的當前位置檢索一行或多行資料
3. 支援對結果集中當前位置的行進行修改
操作如下:
/*--事務--*/
--建立表
create table bank
(
customerld int primary key identity(1,1),
customername char(10),
currentmoney money,
check(currentmoney>=1)
)
go
--新增資料
insert into bank values('張三',1000)
insert into bank values('李四',1)
go
--開啟事務
begin tran bank
--定義接受錯誤的變數
declare @a int
--更新資料
update bank set currentmoney=currentmoney-1000 where customername='張三'
set @a = @
if @a=0 begin --沒有錯誤,執行事務 commit tran print '轉賬成功' end else begin --執行錯誤,回滾事務 rollback tran print '轉賬失敗' end select * from bank go
遊標的使用:
1.定義遊標 declare 遊標名 cursor scroll for 查詢語句
2.開啟遊標 open 遊標名
3.檢索遊標 fetch 遊標名
4.使用完畢關閉遊標 close 遊標名
5.釋放遊標 deallocate 遊標名
操作如下:
/*--遊標--*/ --定義遊標 declare ha cursor scroll for select customername,currentmoney from bank --使用遊標 open ha --定義一個變數,用來存放遊標中讀取出來的值 declare @name varchar(5) , @money money --讀取遊標的第一行記錄 fetch first from ha into @name,@money --迴圈讀取遊標中的記錄 while @@FETCH_STATUS=0 begin print @name+'的餘額為:'+convert(varchar(max),@money)+'元' --讀取遊標的下一行記錄 fetch next from ha into @name,@money end --關閉遊標 close ha --釋放遊標 deallocate ha