Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/sql-server-2008/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在存储过程中开始TRAN和提交TRAN_Sql Server_Sql Server 2008_Tsql_Stored Procedures_Transactions - Fatal编程技术网

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不存在,那么该过程将无法编译,因为您在更新中引用了它