簡體   English   中英

使用Dynamic SQL管理存儲過程中的事務

[英]Managing transaction in stored procedure with Dynamic SQL

我有一個動態SQL存儲過程。 根據@@ERROR的值,是否可以在帶有COMMITROLLBACK的顯式事務中包含一批動態SQL? 遵循類似的存儲過程。 為了演示目的對其進行了簡化。

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

外部事務范圍適用於動態查詢嗎?

“外部”事務將適用於所執行的所有操作。 SQL Server中無法在正在運行的事務下執行(這可能使您想記錄錯誤很煩惱)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM