SQLSERVER中如何实现行锁定呀? |
尚未結案
|
aKnightChen@Hotmail.com
一般會員 發表:62 回覆:57 積分:23 註冊:2003-06-13 發送簡訊給我 |
比如我有一个物料表,能不能支持同时两个用户修改该表中的记录(当然是不同的记录) 程序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 發送簡訊給我 |
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 發送簡訊給我 |
|
aKnightChen@Hotmail.com
一般會員 發表:62 回覆:57 積分:23 註冊:2003-06-13 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
aKnightChen@Hotmail.com
一般會員 發表:62 回覆:57 積分:23 註冊:2003-06-13 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
aKnightChen@Hotmail.com
一般會員 發表:62 回覆:57 積分:23 註冊:2003-06-13 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |