【问题标题】:Set variable to SCOPE_IDENTITY inside of IF statement在 IF 语句中将变量设置为 SCOPE_IDENTITY
【发布时间】:2011-09-07 20:42:19
【问题描述】:

我正在尝试编写一个存储过程来检查记录是否存在,如果不存在则插入返回SCOPE_IDENTITY,如果存在则返回对象的 ID。在过程中获得此信息后,我需要对其进行进一步处理,并且不确定如何从IF...ELSE 语句中获取SCOPE_IDENTITY

我的两张桌子:

CREATE TABLE [dbo].[ActionTable] (
    [ActionID] [int] IDENTITY(1, 1) NOT NULL,
    [ObjectID] [int] NOT NULL,
    [ActionName] [nvarchar](255) NOT NULL
)

CREATE TABLE [dbo].[ObjectTable] (
    [ObjectID] [int] IDENTITY(1, 1) NOT NULL,
    [ObjectName] [nvarchar](255) NOT NULL
)

存储过程:

CREATE PROCEDURE [dbo].[SetAction]
    @ActionName [nvarchar](255),
    @ObjectName [nvarchar](255)
AS
    DECLARE @ObjectID [int]

    --I have tried the following

    IF NOT EXISTS(SELECT ObjectID FROM ObjectTable WHERE ObjectName = @ObjectName)
        INSERT INTO ObjectTable(ObjectName)VALUES(@ObjectName)
        --Here I need to set @ObjectID = SELECT SCOPE_IDENTITY()
    ELSE
        SELECT @ObjectID = ObjectID FROM ObjectTable WHERE ObjectName = @ObjectName

这将返回Incorrect syntax near the keyword 'ELSE'

完成此查找/插入的最佳方法是什么?得到ID后,我将执行以下操作

INSERT INTO ActionTable(ObjectID, ActionName) VALUES(@ObjectID, @ActionName)

SELECT SCOPE_IDENTITY()

【问题讨论】:

    标签: sql-server sql-server-2008 stored-procedures if-statement


    【解决方案1】:

    如果你有不止一件事要做,你需要一个 BEGIN END

    IF NOT EXISTS(SELECT ObjectID FROM ObjectTable WHERE ObjectName = @ObjectName)
    BEGIN
        INSERT INTO ObjectTable(ObjectName)VALUES(@ObjectName)
        SET @ObjectID = SCOPE_IDENTITY()
    END
    ELSE
    BEGIN
        SELECT @ObjectID = ObjectID FROM ObjectTable WHERE ObjectName = @ObjectName
    END
    

    【讨论】:

      【解决方案2】:

      您应该始终使用 BEGIN / END,即使只有一个语句,这样当您稍后添加语句时,您的代码也不会中断。

      IF ...
      BEGIN
          ... statements
      END
      ELSE
      BEGIN
          ... statements
      END
      

      【讨论】:

        猜你喜欢
        • 2014-05-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-14
        • 2017-04-26
        • 2018-12-26
        • 2016-08-17
        • 1970-01-01
        相关资源
        最近更新 更多