2011-09-07 12 views
10

Sto tentando di scrivere una stored procedure che verificherà l'esistenza di un record e se non esiste fare un inserto restituendo il SCOPE_IDENTITY e se esiste semplicemente restituire l'ID di l'oggetto. Dopo aver ottenuto queste informazioni nella procedura, ho bisogno di eseguire ulteriori elaborazioni con esso e sono incerto su come ottenere il SCOPE_IDENTITY all'interno di un'istruzione IF...ELSE.Imposta variabile su SCOPE_IDENTITY all'interno dell'istruzione IF

miei due tabelle:

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 
) 

stored procedure:

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 

Ciò restituisce Incorrect syntax near the keyword 'ELSE'

Quale sarebbe il metodo migliore per realizzare questo ricerca/inserire? Dopo ho l'ID Io poi effettuare le seguenti operazioni

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

SELECT SCOPE_IDENTITY() 

risposta

22

Se si dispone di più di una cosa da fare è necessario un 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 
4

È consigliabile utilizzare sempre BEGIN/END anche per un solo dichiarazione in modo che quando si aggiungono le istruzioni in seguito il codice non si rompa.

IF ... 
BEGIN 
    ... statements 
END 
ELSE 
BEGIN 
    ... statements 
END 
Problemi correlati