線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1150
推到 Plurk!
推到 Facebook!

SQLSERVER中如何实现行锁定呀?

尚未結案
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-04-16 13:29:53 IP:59.42.xxx.xxx 未訂閱
比如我有一个物料表,能不能支持同时两个用户修改该表中的记录(当然是不同的记录) 程序A,B,都在事务保护过程中,这里,A修改物料表中的A001记录,而B修改B001记录。 ---如何实现? --------------------------- 我用的测试例子: 程序A, a.close; a.sql.text:='BEGIN TRAN'; a.ExecSQL; a.close; a.sql.text:='update UN_ITEM set QTY=1 where ITEM_CODE="A001"'; a.ExecSQL; showmessage('正在测试。。。等待B程序运行。。。'); a.close; a.sql.text:='commit tran'; a.ExecSQL; -------B程序------- a.close; a.sql.text:='BEGIN TRAN'; a.ExecSQL; a.close; a.sql.text:='update UN_ITEM set QTY=1 where ITEM_CODE="A002"'; a.ExecSQL; showmessage('B程序已成功修改了另一条记录'); a.close; a.sql.text:='commit tran'; a.ExecSQL; 测试结果,只有A程序执行完事务,才可以进行B程序。 而我原意是A的事务执行到一半时,就进行B程序. 哪位给我点个路?
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-04-16 15:02:15 IP:220.132.xxx.xxx 未訂閱
Hi, 修改如下紅字,    
  a.close;
  a.sql.text:='BEGIN TRAN';
  a.ExecSQL;      a.close;
  a.sql.text:='update UN_ITEM with (rowlock) set QTY=1 where ITEM_CODE="A001"';
  a.ExecSQL;      showmessage('正在测试。。。等待B程序运行。。。');      a.close;
  a.sql.text:='commit tran';
  a.ExecSQL;
不過就我所知, sql server 預設是會利用 rowlock 的方式去異動資料的.
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-04-16 16:56:15 IP:59.42.xxx.xxx 未訂閱
感谢timhuang的回答。 可是结果还是和我前面的一样。 可能SQL默认就是ROWLOCK。
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-04-16 17:01:04 IP:59.42.xxx.xxx 未訂閱
我觉得可能要在“BEGIN TRAN。。。”这里加参数。。。但我不知道怎么做。
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-04-17 11:11:58 IP:220.132.xxx.xxx 未訂閱
Hi, 弟利用 delphi 7 ADO SQL Server 2000 利用你的程式執行, 發現是沒有這個問題的, 兩個程序皆可正常運作, 不知你使用的環境為何?
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-04-19 10:16:51 IP:219.136.xxx.xxx 未訂閱
imhuang, 有一定的执行顺序,即A程序执行到SHOWMESSAGE时就停下来(此时它的程序段处于BEGIN TRAN 和 COMMIT之间) 此时再执行B程序。 我的目的是要实现“行锁定”,而我发现BEGIN TRAN是表锁定。(即A程序在操作表时,B程序就无法访问)
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-04-19 13:19:36 IP:203.95.xxx.xxx 未訂閱
Hi, 我測試的流程是依照你設計的方法來執行的沒錯. 所以才希望你能提供你的執行環境啊, 看是否有什麼差異, 產生出這個問題.
aKnightChen@Hotmail.com
一般會員


發表:62
回覆:57
積分:23
註冊:2003-06-13

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-04-23 12:49:50 IP:59.42.xxx.xxx 未訂閱
我的是WINDOW2003,安装的是SQL企业版2000。
系統時間:2024-07-07 11:19:54
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!