Estoy intentando escribir un procedimiento almacenado que comprobará la existencia de un registro y, si no existe, inserte el SCOPE_IDENTITY
y, si existe, simplemente devuelva el ID de el objeto. Después de obtener esta información en el procedimiento, debo seguir procesándola y no estoy seguro de cómo lograr obtener el SCOPE_IDENTITY
dentro de una declaración IF...ELSE
.Establezca la variable a SCOPE_IDENTITY dentro de la instrucción IF
Mis dos tablas:
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
)
Procedimiento almacenado:
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
Esto devuelve Incorrect syntax near the keyword 'ELSE'
¿Cuál sería el mejor método para lograr esto las operaciones de búsqueda/insertar? Después de obtener el ID voy a continuación, hacer lo siguiente
INSERT INTO ActionTable(ObjectID, ActionName) VALUES(@ObjectID, @ActionName)
SELECT SCOPE_IDENTITY()