SQL比较渣,问一下各位,
在存储过程中依次执行语句A和语句B,语句A会影响语句B的查询结果,但是我不希望在一个会话里执行语句B的时候,另外一个回话执行语句A,导致查询的结果不对,请问一下加个WITH(XLOCK)有用吗? WITH(XLOCK)应该是排它锁吧?
语句A: UPDATE TableA SET xx=xx WHERE Id=1
语句B:SELECT * FROM TableA WITH(XLOCK) WHERE XX=XX
不需要xlock,默认读提交隔离级别下,S锁与X锁互斥,也就是你在select的时候,会阻塞更新
假如在一个会话中执行完A,还没有执行B,这时候另一个会话执行了A。那第一个会话执行B后查询出来的是 两个会话都执行了A的结果。我只想要在各自会话中执行B查出来的是自己会话中执行A的结果
@晚上睡不着.白天打瞌睡: 你放在一个事务里就可以了
begin tran
XXXXXXXX
end tran