使用Dynamic SQL管理存储过程中的事务

时间:2015-07-24 18:25:06

标签: sql sql-server tsql stored-procedures

我有一个带动态SQL的存储过程。是否可以在COMMITROLLBACK的显式事务中包含一批动态SQL,具体取决于@@ERROR的值?     遵循类似的存储过程。它是为了演示目的而简化的。

CREATE PROCEDURE [dbo].[sp_Example] 
AS 
BEGIN
    BEGIN TRANSACTION
    DECLARE @ID VARCHAR(10)
    INSERT INTO [dbo].[Deparment] (Name,Location,PhoneNumber) VALUES ('DeparmentName','DeparmentLocation','0112232332')

    SELECT @ID =SCOPE_IDENTITY()

    IF @@ERROR <> 0
    BEGIN
           ROLLBACK
           RAISERROR ('Error in Inserting Deparment.', 16, 1)
           RETURN
   END
            SET @InsertQuery = '
                                DECLARE @Name varchar(100)

                                SELECT  @Name = Name
                                FROM    dbo.[Deparment]
                                WHERE   DepartmentId= ''' + @ID +'''

                                INSERT INTO [dbo].[Employee](Name,Age,Salary,DepartmentName)VALUES(''EMPLOYEE NAME'',''25'',''200000'','''+@NAME'')'' 

            EXEC(@InsertQuery)
    IF @@ERROR <> 0
    BEGIN
           ROLLBACK
           RAISERROR ('Error in Inserting Employee.', 16, 1)
           RETURN
    END

   COMMIT
END

外部交易范围是否适用于动态查询?

1 个答案:

答案 0 :(得分:0)

“外部”交易将适用于所执行的所有事务。 SQL Server中没有办法在正在运行的事务下执行(这可能会让您想要记录错误而烦恼)。