Setzen Sie die variable auf SCOPE_IDENTITY innerhalb der IF-Anweisung
Bin ich zu schreiben versucht, eine gespeicherte Prozedur, die prüft, ob die Existenz eines Datensatzes, und wenn es nicht vorhanden ist, muss eine insert-Rückkehr der SCOPE_IDENTITY
und wenn es vorhanden ist, schicken Sie einfach die ID des Objekts. Nachdem ich diese information erhalten Sie in der Prozedur, die ich tun müssen, um die weitere Verarbeitung mit es und ich bin nicht sicher, wie das zu erreichen immer die SCOPE_IDENTITY
innerhalb einer IF...ELSE
- Anweisung.
Meine beiden Tabellen:
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
)
Gespeicherte Prozedur:
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
Zurück Incorrect syntax near the keyword 'ELSE'
Was wäre die beste Methode für die Durchführung dieser lookup/einfügen? Nachdem ich die ID, die ich dann die folgenden
INSERT INTO ActionTable(ObjectID, ActionName) VALUES(@ObjectID, @ActionName)
SELECT SCOPE_IDENTITY()
InformationsquelleAutor jon3laze | 2011-09-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn du mehr als eine Sache zu tun, müssen Sie eine BEGIN-END -
InformationsquelleAutor Ben Robinson
Sollten Sie immer mit BEGIN /END auch nur für eine einzige Anweisung, so dass, wenn Sie hinzufügen, Aussagen später Ihren code nicht zu brechen.
InformationsquelleAutor Aaron Bertrand