SQL 2012 - TRANSACTION中的表锁定

时间:2014-07-21 19:04:57

标签: sql-server tsql sql-server-2012

我有以下TRANSACTION结构:

BEGIN TRY
BEGIN tran sometransaction  
   INSERT INTO local_table_1 (columns...) 
      SELECT (columns...) 
      FROM remote_table 
      WHERE (conditions, predicates)

   UPDATE local_table_1 
   SET column_A = value 
   WHERE....

   UPDATE local_table_1 
   SET column_B = value 
   WHERE....

   UPDATE local_table_1 
   SET column_C = value 
   WHERE....

   COMMIT tran sometransaction
END TRY
BEGIN catch
   ROLLBACK tran sometransaction    
END catch   

我想确保不允许任何人阅读local_table_1的内容,除非此交易中的所有陈述都已结束且已提交。

有没有办法在整个交易中设置WITH (TABLOCKX, HOLDLOCK)?我理解表在事务执行期间会自动锁定,但如果扩展在外部并发读取进程上,我找不到任何解释。

谢谢。

2 个答案:

答案 0 :(得分:0)

在开始交易之前,将事务隔离级别设置为READ COMMITTED或REPEATABLE READ。以下链接有说明和示例:

http://msdn.microsoft.com/en-us/library/ms173763.aspx

答案 1 :(得分:0)

除非您的外部进程使用NOLOCK提示或READ UNCOMMITTED隔离,否则外部进程不会读取未提交的事务。这与参考sql的ACID属性的Isolation有关。 http://en.wikipedia.org/wiki/ACID

相关问题