儲存過程中使用隔離級別

2021-04-12 21:47:20 字數 1340 閱讀 4554

set   transaction   isolation   level  

控制由連線發出的所有   microsoft®   sql   server™   select   語句的預設事務鎖定行為。  

語法  

set   transaction   isolation   level  

引數  

read   committed  

指定在讀取資料時控制共享鎖以避免髒讀,但資料可在事務結束前更改,從而產生不可重複讀取或幻像資料。該選項是   sql   server   的預設值。  

read   uncommitted  

執行髒讀或   0   級隔離鎖定,這表示不發出共享鎖,也不接受排它鎖。當設定該選項時,可以對資料執行未提交讀或髒讀;在事務結束前可以更改資料內的數值,行也可以出現在資料集中或從資料集消失。該選項的作用與在事務內所有語句中的所有表上設定   nolock   相同。這是四個隔離級別中限制最小的級別。  

repeatable   read  

鎖定查詢中使用的所有資料以防止其他使用者更新資料,但是其他使用者可以將新的幻像行插入資料集,且幻像行包括在當前事務的後續讀取中。因為併發低於預設隔離級別,所以應只在必要時才使用該選項。  

serializable  

在資料集上放置乙個範圍鎖,以防止其他使用者在事務完成之前更新資料集或將行插入資料集內。這是四個隔離級別中限制最大的級別。因為併發級別較低,所以應只在必要時才使用該選項。該選項的作用與在事務內所有   select   語句中的所有表上設定   holdlock   相同。  

注釋  

一次只能設定這些選項中的乙個,而且設定的選項將一直對那個連線保持有效,直到顯式更改該選項為止。這是預設行為,除非在語句的   from   子句中在表級上指定優化選項。  

set   transaction   isolation   level   的設定是在執行或執行時設定,而不是在分析時設定。  

示例  

下例為會話設定   transaction   isolation   level。對於每個後續   transact-sql   語句,sql   server   將所有共享鎖一直控制到事務結束為止。  

set   transaction   isolation   level   repeatable   read  

go  

begin   transaction  

select   *   from   publishers  

select   *   from   authors  

...  

commit   transaction  

儲存過程中使用事務

create procedure updatewanjun username nvarchar 500 userpassword nvarchar 500 returnval int output as set xact abort on begin transaction t update adm...

儲存過程中使用游標

create proc cursortest id int 0,name varchar 50 as 建立游標 declare cursor cursor 設定游標欲操作的資料集 set cursor cursor for select id,name from users 開啟游標 open cu...

儲存過程示例 在儲存過程中使用臨時表

create or replace procedure product temp update prc aspc delestr varchar2 50 刪除臨時表記錄語句 pc createstr varchar2 500 建立臨時表 tabext varchar2 10 用於判斷臨時表是否存在中...