2011-09-07 16 views
10

レコードの存在をチェックするストアドプロシージャを作成しようとしていますが、存在しない場合はSCOPE_IDENTITYを返す挿入を行い、存在すればオブジェクト。私が手順でこの情報を取得した後、それを使ってさらに処理を行う必要があり、ステートメント内でSCOPE_IDENTITYを取得する方法を確信できません。IFステートメント内の変数を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を取得した後、私は、あなたが行うには、複数のものを持っている場合は、BEGIN ENDあなたはいつもでも一つだけのための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 
SELECT @ObjectID = ObjectID FROM ObjectTable WHERE ObjectName = @ObjectName 

答えて

22

を行います文を追加すると、後でコードが壊れないようになります。

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

を必要とし、次の

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

SELECT SCOPE_IDENTITY() 
関連する問題