2011-09-07 22 views
10

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() 

Respuesta

22

Si usted tiene más de una cosa que hacer que necesita un comenzará a finales del

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 
4

Siempre debe usar BEGIN/END incluso para una sola declaración para que cuando agregue declaraciones más tarde su código no se rompa.

IF ... 
BEGIN 
    ... statements 
END 
ELSE 
BEGIN 
    ... statements 
END 
Cuestiones relacionadas