2012-01-16 13 views
5

जब मैं INSERT SELECT का उपयोग करता हूं तो @@ पहचान का उपयोग कैसे करें?एसक्यूएल डालने का चयन करें @@ पहचान

DECLARE @ENTITYID AS BIGINT 

INSERT INTO Quiz_QuizQuestion 
SELECT @ENTITYID, 
     @DIFICULTLEVELCODE, 
     ENTITYID, 
     @QuizEntityId, 
     Title, 
     [Description], 
     [Description], 
     Duration 
FROM Education_Question 
WHERE EntityID = 1 --THIS SELECT RETURN JUST 1 RECORD 
SET @ENTITYID = @@IDENTITY 

SELECT @ENTITYID // NULL 
+2

है' Quiz_QuizQuestion' वास्तव में किसी भी स्तंभ 'के रूप में IDENTITY' (नायब परिभाषित किया गया है बनाने की जरूरत यह बताएं कि '@ENTITYID नल' क्यों है) –

+0

नहीं, केवल एक, EntityID - कुंजी – AFetter

+0

वैसे यही कारण है कि तब शून्य है। यह आपके सत्र के लिए अंतिम प्रविष्टि पहचान मान देता है।] (Http://msdn.microsoft.com/en-us/library/ms187342.aspx)। –

उत्तर

4

आप अपने परिदृश्य में तालिका में पहचान @@ डालने की जरूरत नहीं है - आप करने के लिए है इस प्रकार बनासाथ तालिका पहचान क्षेत्र:

CREATE TABLE Quiz_QuizQuestion 
(
    EntityId int IDENTITY NOT NULL, 
    ... 
) 
GO 

DECLARE @ENTITYID AS BIGINT 

INSERT INTO Quiz_QuizQuestion 
SELECT 
     @DIFICULTLEVELCODE, 
     ENTITYID, 
     @QuizEntityId, 
     Title, 
     [Description], 
     [Description], 
     Duration 
FROM Education_Question 
WHERE EntityID = 1 --THIS SELECT RETURN JUST 1 RECORD 
SET @ENTITYID = SCOPE_IDENTITY() 

SELECT @ENTITYID // NULL 
2

यह MSDN से शब्दशः नकल की जाती है पृष्ठ @@IDENTITY: "INSERT, SELECT INTO के बाद, या थोक प्रति स्टेटमेंट पूर्ण हो जाता है, @@IDENTITY में कथन द्वारा उत्पन्न अंतिम पहचान मान शामिल है। यदि कथन पहचान कॉलम के साथ किसी भी तालिका को प्रभावित नहीं करता है, @@IDENTITYNULL देता है। एकाधिक पंक्तियों डाला रहे हैं, तो कई पहचान मूल्यों को पैदा करने, @@ पहचान उत्पन्न पिछले पहचान मान देता है। "(link)। मैं आपको लगता है कि अधिक से अधिक जानकारी की जरूरत है, तो पता नहीं है।

+0

एसक्यूएल संदेश: (1 पंक्ति प्रभावित) @@ पहचान = शून्य; – AFetter

+2

@ कोलोहो - आपने एक टिप्पणी पर कहा कि आपकी तालिका में पहचान कॉलम नहीं है, इसलिए आपके डालने के बाद '@@ पहचान '' NULL' होगी – Lamak

+0

क्षमा करें, तालिका में एक कुंजी है, EntityID एक प्राथमिक कुंजी है। – AFetter

1

@@identity केवल अंतिम मान डाला देता है ।? समय के 99% आप की जरूरत `SCOPE_IDENTITY` वैसे भी लेकिन shouldn: एक IDENTITY field

में आप एक IDENTITY field बजाय :)

संबंधित मुद्दे