Я пытаюсь написать хранимую процедуру, которая проверит наличие записи и, если она не существует, вставит сообщение, возвращающее SCOPE_IDENTITY
, и, если оно существует, просто вернет идентификатор объекта.После того как я получу эту информацию в процедуре, мне нужно будет выполнить дальнейшую обработку с ней, и я не уверен, как выполнить получение SCOPE_IDENTITY
из оператора IF...ELSE
.
Мои две таблицы:
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'
Какой будет наилучший метод для выполнения этого поиска / вставки?После того, как я получу удостоверение личности, я сделаю следующее
INSERT INTO ActionTable(ObjectID, ActionName) VALUES(@ObjectID, @ActionName)
SELECT SCOPE_IDENTITY()