原子存储过程出错

时间:2017-10-23 08:57:53

标签: sql-server stored-procedures

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行'结束'附近的语法不正确。

有什么想法吗?

没有开始原子,它可以正常工作!

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:0)

  

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

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