8

मैंने this question को एक सम्मिलित पंक्ति की पहचान प्राप्त करने के बारे में पढ़ा है। मेरा सवाल संबंधित है।डालने वाली पंक्ति के पीके गाइड प्राप्त करने का सबसे अच्छा तरीका

क्या कोई डाली गई पंक्ति के लिए guid प्राप्त करने का कोई तरीका है? जिस तालिका में मैं काम कर रहा हूं उसके पास प्राथमिक कुंजी (न्यूडिड के लिए डिफॉल्ट) के रूप में एक guid है, और मैं पंक्ति डालने के बाद उस GUID को पुनर्प्राप्त करना चाहता हूं।

क्या कुछ भी @@IDENTITY, IDENT_CURRENT या SCOPE_IDENTITY Guids के लिए कुछ भी है?

उत्तर

12

आप डिफ़ॉल्ट मान वापस पैरामीटर में वापस करने के लिए OUTPUT कार्यक्षमता का उपयोग कर सकते हैं।

CREATE TABLE MyTable 
(
    MyPK UNIQUEIDENTIFIER DEFAULT NEWID(), 
    MyColumn1 NVARCHAR(100), 
    MyColumn2 NVARCHAR(100) 
) 

DECLARE @myNewPKTable TABLE (myNewPK UNIQUEIDENTIFIER) 

INSERT INTO 
    MyTable 
(
    MyColumn1, 
    MyColumn2 
) 
OUTPUT INSERTED.MyPK INTO @myNewPKTable 
VALUES 
(
    'MyValue1', 
    'MyValue2' 
) 

SELECT * FROM @myNewPKTable 

मुझे हालांकि कहना है, प्राथमिक कुंजी के रूप में एक अद्वितीय पहचानकर्ता का उपयोग करके सावधान रहें। एक GUID पर इंडेक्सिंग बेहद खराब प्रदर्शन है क्योंकि किसी भी नए जेनरेट किए गए ग्रिड को इंडेक्स के बीच में डालना होगा और अंत में केवल जोड़ दिया जाएगा। NewSequentialId() के लिए SQL2005 में नई कार्यक्षमता है। यदि आपके ग्विड्स के साथ अस्पष्टता की आवश्यकता नहीं है तो यह एक संभावित विकल्प है।

+0

हाय, सलाह के लिए धन्यवाद डालने यदि। यह कोड एक त्रुटि देता है "तालिका चर घोषित करना चाहिए" @myNewPK ""। ऐसा लगता है कि आप केवल एक टेबल में आउटपुट कर सकते हैं। मुझे यह एक अस्थायी तालिका घोषित करके और फिर तालिका से आईडी का चयन करके काम कर रहा है। आपकी मदद के लिए धन्यवाद, और ग्विड्स के खराब प्रदर्शन पर सलाह। –

+0

क्षमा करें, मैंने इसका परीक्षण नहीं किया था, जो मुझे याद आया उससे इसे फेंक रहा था। अब एक तालिका चर लौटने के साथ जवाब अद्यतन किया है। –

+0

बहुत अच्छा, धन्यवाद रॉबिन। स्वीकृत :) –

1

एक और क्लीनर दृष्टिकोण, एक ही पंक्ति

CREATE TABLE MyTable 
(
    MyPK UNIQUEIDENTIFIER DEFAULT NEWID(), 
    MyColumn1 NVARCHAR(100), 
    MyColumn2 NVARCHAR(100) 
) 

DECLARE @MyID UNIQUEIDENTIFIER; 
SET @MyID = NEWID(); 

INSERT INTO 
    MyTable 
(
    MyPK 
    MyColumn1, 
    MyColumn2 
) 
VALUES 
(
    @MyID, 
    'MyValue1', 
    'MyValue2' 
) 

SELECT @MyID; 
संबंधित मुद्दे