我有一个如下所示的程序
BEGIN
SET NOCOUNT ON
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'X')
UPDATE TABLE X
SET ROW = 4
WHERE NAME = 'STEVE'
IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'Y')
UPDATE TABLE Y
SET ROW = 5
WHERE NAME = 'ART'
END
如果我想要在原子性中评估两个IF语句,我是否需要添加BEGIN TRAN和COMMIT TRAN封装?
答案 0 :(得分:1)
是的,如果你想要原子性,你需要使用一个交易。
答案 1 :(得分:1)
使用BEGIN / END TRAN不能保证两个IF语句都被评估。如果第一个SELECT / UPDATE失败并出现错误,则可能不会执行第二个SELECT / UPDATE。
但是BEGIN / END TRAN将保证UPDATE语句都被执行或两者都没有。
答案 2 :(得分:1)
我认为你可能会遇到更深层次的问题 - 如果表X不存在则程序将无法编译,因为你在UPDATE中有对它的引用