首页 文章

原子存储过程出错

提问于
浏览
0

InsertCity 存储过程,在数据库中插入城市名称 . 成功插入后,记录完成它的人(使用 insertlog 存储过程) . 这些步骤应该是原子的 .

这是我的SQL Server代码:

ALTER PROCEDURE [paycom].[InsertCity]
(
    @name nvarchar(50),
    @employeeID int
)

AS

Begin Atomic

    SET NOCOUNT OFF;
    declare @cityID int

    INSERT INTO City (CityName) VALUES (@name)
    select @cityID = Scope_IDentity()
    exec InsertLog @employeeID, @name, @cityID

    return @cityID
End

我得到这个错误:

消息156,级别15,状态1,过程插入城市,第15行关键字“SET”附近的语法不正确 . 消息102,级别15,状态1,过程插入城市,第23行'结束'附近的语法不正确 .

有什么想法吗?

without begin atomic, it works properly!

2 回答

  • 3

    BEGIN ATOMIC需要以下选项:必需设置TRANSACTION ISOLATION LEVEL LANGUAGE

    https://msdn.microsoft.com/eu-es/library/dn452281(v=sql.120).aspx

  • 0

    你的真正含义是使用transaction和正确的错误处理 .

    并且不要使用RETURN返回值

    SET NOCOUNT OFF;
    Declare @cityID int;
    
    Begin TRY
    
       BEGIN TRANSACTION;
    
        INSERT INTO City (CityName) VALUES (@name)
        select @cityID = Scope_IDentity()
        exec InsertLog @employeeID, @name, @cityID
    
        COMMIT TRANSACTION;
    
        SELECT @cityID;
    End try
    BEGIN CATCH
        IF XACT_STATE() <> 0
           ROLLBACK TRANSACTION;
        THROW;
    END CATCH
    

    我怀疑你真的想要使用内存中的OLTP等

相关问题