關于SQL Server2K的加鎖問題?
大家都知道﹐在SQL Server2k中訪問已經加鎖的數據﹐在pb前台會出現類似與死機的情況。
現在為了避免這種情況發生﹐我寫下了如下代碼:
以前我是用Oracle 的﹐SQL Server2k不是很熟,所以我采取了類似于Oracle 中update nowait的方法。
給表中需要的記錄加鎖:
For i = 1 To dw_test.Rowcount()
ls_test = dw_test.Object.column[i]
select 1 into :li_test From table1 with (tablock holdlock)
where column = :ls_test;
Next
在使用表table1中的某一條記錄時﹐為了避免出現死機的情況﹐先判斷該條記錄是否已經被加鎖
代碼﹕ select 1 into :li_test From table1 with (ReadPast) --只讀未被加鎖的
where column = :ls_test; // ls_test 為要用記錄的主鍵
if sqlca.sqlcode = 100 Then Messagebox('test',該記錄已經被加鎖﹐請稍后再試)
如果判斷某個表是否被加鎖﹐則可使用
select count(*) into :li_other From table1 with (Nolock) -- 臟讀
select count(*) into :li_num From table1 with(ReadPast)
If li_other <> li_num Then Messagebox('test','該表已有記錄被加鎖')
但在實際使用中﹐總是達不到預期效果﹐請大俠們指教?
问题点数:0、回复次数:5Top
1 楼Juphone(Juphone)回复于 2004-09-04 15:50:05 得分 0
upTop
2 楼Juphone(Juphone)回复于 2004-09-04 16:20:03 得分 0
upTop
3 楼Juphone(Juphone)回复于 2004-09-06 08:20:04 得分 0
upTop
4 楼lzheng2001(1加1)回复于 2004-09-06 09:40:10 得分 0
你现在出现的结果是什么?Top
5 楼mohock520(毕业前让我抱抱你)回复于 2004-09-06 09:47:05 得分 0
upTop




