Sql server 在存储过程中开始TRAN和提交TRAN
我有一个程序,如下所示Sql server 在存储过程中开始TRAN和提交TRAN,sql-server,sql-server-2008,tsql,stored-procedures,transactions,Sql Server,Sql Server 2008,Tsql,Stored Procedures,Transactions,我有一个程序,如下所示 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 WHER
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封装?是的,如果需要原子性,则需要使用事务。使用BEGIN/END TRAN不能保证两个if语句都被计算。如果第一次选择/更新失败并出现错误,则可能不会执行第二次选择/更新
但是BEGIN/END TRAN将保证两个UPDATE语句都被执行,或者两者都没有执行。我认为您可能会遇到更深层次的问题-如果表X不存在,那么该过程将无法编译,因为您在更新中引用了它