【问题标题】:Error in Atomic stored procedure原子存储过程中的错误
【发布时间】:2017-10-23 08:57:52
【问题描述】:

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,过程 InsertCity,第 15 行不正确 关键字“SET”附近的语法。消息 102,级别 15,状态 1,程序 InsertCity,第 23 行 'End' 附近的语法不正确。

有什么想法吗?

没有 begin atomic,它可以正常工作!

【问题讨论】:

    标签: sql-server stored-procedures


    【解决方案1】:

    您真正的意思是使用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 等

    【讨论】:

      【解决方案2】:

      BEGIN ATOMIC 需要以下选项: 必需 设置事务隔离级别语言

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-13
        • 1970-01-01
        • 2018-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多