10

के अंदर SCOPE_IDENTITY को वैरिएबल सेट करें, मैं एक संग्रहित प्रक्रिया लिखने की कोशिश कर रहा हूं जो रिकॉर्ड के अस्तित्व की जांच करेगा और यदि यह मौजूद नहीं है तो SCOPE_IDENTITY लौटने वाला एक डालने और यदि यह मौजूद है तो बस आईडी की वापसी करें उदेश्य। प्रक्रिया में इस जानकारी को प्राप्त करने के बाद मुझे इसके साथ आगे प्रसंस्करण करने की आवश्यकता है और कथन के भीतर से SCOPE_IDENTITY प्राप्त करने के बारे में अनिश्चित हूं।IF कथन

मेरे दो तालिकाओं:

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'

क्या यह देखने को पूरा करने के लिए सबसे अच्छा तरीका होगा/डालने? बाद मैं आईडी प्राप्त करने मैं तो आप आप एक अंत शुरू

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 

उत्तर

22

करना होगा कथन ताकि जब आप बाद में कथन जोड़ते हैं तो आपका कोड टूट नहीं जाता है।

IF ... 
BEGIN 
    ... statements 
END 
ELSE 
BEGIN 
    ... statements 
END 
4

तुम हमेशा शुरू का उपयोग करना चाहिए/भी केवल एक ही के लिए अंत की जरूरत है ऐसा करने के लिए एक से अधिक बात है, तो निम्न

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

SELECT SCOPE_IDENTITY()