日期:2014-05-17  浏览次数:20487 次

如何在存储过程中锁定表
在一个存储过程中有这样一段代码
truncate table tmpTable
insert into tmpTable() select * from .....

另一个存储过程会访问这个tmpTable表,所以必须要保证前面这两个语句都执行完,才能访问这个表,不然就可能造成读取不到任何数据了。

------解决方案--------------------
默认隔离级别就会锁住,没必要做什么限制啊
------解决方案--------------------
在sql server中一条语句就是一个事务,如果你想要每次读数据,都能读到数据,那么必须在原来的存储过程中使用显式事务:

/*
在一个存储过程中有这样一段代码
truncate table tmpTable
insert into tmpTable() select * from .....
*/

--把上面的存储过程的代码改为
begin tran
truncate table tmpTable

insert into tmpTable() select * from .....
commit tran


然后在其他存储过程中要读取tmpTable的数据时,如果正在truncate table和insert 数据,那么你的存储过程会把阻塞住,知道commit事务后,就能读取到数据了。