首页 文章

在SQL Server事务中创建过程

提问于
浏览
1

我是SQL Sever的新手,我正在尝试在事务中创建一个过程,如下所示:

BEGIN TRY
        SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
        BEGIN TRANSACTION MyTran

        --*****************************************************************************         
        USE [Database]
        Create PROCEDURE [dbo].[SP_StoreProcedure] AS

        --Some SQL Queries here
        Go

        Commit TRANSACTION MyTran
        END TRY

        BEGIN CATCH
            ROLLBACK TRANSACTION ;
        END CATCH;
        SET TRANSACTION ISOLATION LEVEL READ COMMITTED

但是我得到这些错误:

消息156,级别15,状态1,行9关键字'PROCEDURE'附近的语法不正确 . 消息102,级别15,状态1,行5'BEGIN'附近的语法不正确 . 消息102,级别15,状态1,行14'END'附近的语法不正确 .

如果在SQL Server中无法做到这一点有什么解决方法?

4 回答

  • 0
    USE [Database]
        Create PROCEDURE [dbo].[SP_StoreProcedure] AS
        SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
        BEGIN TRANSACTION MyTran
        BEGIN TRY
    
        Commit TRANSACTION MyTran
        END TRY
    
        BEGIN CATCH
            ROLLBACK TRANSACTION MyTran;
        END CATCH;
    
  • 2

    存储过程的创建应该是脚本中的第一个语句 . 将存储过程创建放在 VARCHAR(MAX) (即作为字符串)中,并使用 EXEC sp_executesql <your_sp_creation_varchar>

  • 0

    Your Syntax is Wrong

    Create PROCEDURE [dbo].[SP_StoreProcedure] AS
         SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
         BEGIN
           BEGIN TRY
           BEGIN TRANSACTION MyTran
    
        --Some SQL Queries here
    
    
           Commit TRANSACTION MyTran
           END TRY
    
           BEGIN CATCH
            ROLLBACK TRANSACTION ;
            PRINT ERROR_MESSAGE();   -- For Debugging
          END CATCH;
          SET TRANSACTION ISOLATION LEVEL READ COMMITTED
        END
    
  • 0

    TSQL - create a stored proc inside a transaction statement有一个很好的答案 .

    user KM说:尝试在EXEC('...')中执行创建过程,如下所示:

    Begin Try
    Begin Transaction 
        -- do a bunch of add/alter tables here
        -- do a bunch of data manipulation/population here
    
        -- create a stored proc
      EXEC ('create procedure dbo.test
      as
      begin
        select * from some_table
      end')
    Commit  
    End Try
    Begin Catch
        Rollback  
        Declare @Msg nvarchar(max)
        Select @Msg=Error_Message();
        RaisError('Error Occured: %s', 20, 101,@Msg) With Log;
    End Catch
    
    GO
    

相关问题