我有以下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)
?我理解表在事务执行期间会自动锁定,但如果扩展在外部并发读取进程上,我找不到任何解释。
谢谢。
答案 0 :(得分:0)
在开始交易之前,将事务隔离级别设置为READ COMMITTED或REPEATABLE READ。以下链接有说明和示例:
答案 1 :(得分:0)
除非您的外部进程使用NOLOCK提示或READ UNCOMMITTED隔离,否则外部进程不会读取未提交的事务。这与参考sql的ACID属性的Isolation有关。 http://en.wikipedia.org/wiki/ACID