レコードの存在をチェックするストアドプロシージャを作成しようとしていますが、存在しない場合は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