Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

SQL सर्वर में अंतिम-सम्मिलित पहचान मान वापस करने के लिए @@ पहचान का उपयोग करें

SQL सर्वर में, आप T-SQL का उपयोग कर सकते हैं @@IDENTITY सिस्टम वर्तमान सत्र में अंतिम-सम्मिलित पहचान मान वापस करने के लिए कार्य करता है।

ध्यान दें कि यह किसी भी . में जेनरेट किया गया अंतिम पहचान मान लौटाता है तालिका वर्तमान सत्र में . यह IDENT_CURRENT() . के विपरीत है फ़ंक्शन, जो अंतिम सम्मिलित पहचान मान किसी तालिका के लिए . देता है ।

SCOPE_IDENTITY() फ़ंक्शन बहुत हद तक @@IDENTITY . के समान है इसमें यह वर्तमान सत्र में अंतिम-सम्मिलित पहचान मान भी लौटाता है। अंतर यह है कि SCOPE_IDENTITY() वर्तमान दायरे तक सीमित है।

उदाहरण 1

यहां @@IDENTITY . का मूल कोड उदाहरण दिया गया है उपयोग।

SELECT @@IDENTITY AS [Last-Inserted Identity Value];

परिणाम:

+--------------------------------+
| Last-Inserted Identity Value   |
|--------------------------------|
| NULL                           |
+--------------------------------+

इसका कारण NULL returns है ऐसा इसलिए है क्योंकि मैंने SQL सर्वर के लिए एक नया सत्र खोला है, और मैंने अपने वर्तमान सत्र के दौरान अभी तक एक पहचान कॉलम अपडेट नहीं किया है।

नीचे कुछ कोड दिया गया है जो कुछ पहचान कॉलम अपडेट करता है।

CREATE TABLE Cats(id int IDENTITY);
CREATE TABLE Dogs(id int IDENTITY);

INSERT Cats DEFAULT VALUES;
INSERT Cats DEFAULT VALUES;
SELECT @@IDENTITY AS [Last-Inserted Identity Value];

परिणाम:

+--------------------------------+
| Last-Inserted Identity Value   |
|--------------------------------|
| 2                              |
+--------------------------------+

यहां, मैं कुछ टेबल बनाता हूं, कुछ डेटा सम्मिलित करता हूं, फिर वर्तमान पहचान मान का चयन करता हूं।

वर्तमान पहचान मान 2 है क्योंकि मैंने उस तालिका में दो पंक्तियाँ डाली हैं।

अब एक पंक्ति को दूसरी तालिका में सम्मिलित करते हैं:

INSERT Dogs DEFAULT VALUES;
SELECT @@IDENTITY AS [Last-Inserted Identity Value];

परिणाम:

+--------------------------------+
| Last-Inserted Identity Value   |
|--------------------------------|
| 1                              |
+--------------------------------+

लौटाया गया मान 1 है, क्योंकि यह इस सत्र के लिए आखिरी बार डाला गया पहचान मान है।

उदाहरण 2 - IDENT_CURRENT() की तुलना में

यहां इसकी तुलना IDENT_CURRENT() . से की गई है ।

SELECT 
  @@IDENTITY AS [@@IDENTITY],
  IDENT_CURRENT('Cats') AS [IDENT_CURRENT('Cats')],
  IDENT_CURRENT('Dogs') AS [IDENT_CURRENT('Dogs')];

परिणाम:

+--------------+-------------------------+-------------------------+
| @@IDENTITY   | IDENT_CURRENT('Cats')   | IDENT_CURRENT('Dogs')   |
|--------------+-------------------------+-------------------------|
| 1            | 2                       | 1                       |
+--------------+-------------------------+-------------------------+

जैसा कि बताया गया है, IDENT_CURRENT() निर्दिष्ट तालिका के आधार पर अपना परिणाम देता है। इसलिए हम इसका उपयोग प्रत्येक तालिका के लिए अंतिम पहचान मान खोजने के लिए कर सकते हैं।

उदाहरण 3 - एक नए सत्र में स्विच करें

अब अगर मैं एक नया कनेक्शन खोलता हूं और @@IDENTITY . का चयन करता हूं फिर, यही होता है:

USE Test;
SELECT 
  @@IDENTITY AS [@@IDENTITY],
  IDENT_CURRENT('Cats') AS [IDENT_CURRENT('Cats')],
  IDENT_CURRENT('Dogs') AS [IDENT_CURRENT('Dogs')];

परिणाम:

+--------------+-------------------------+-------------------------+
| @@IDENTITY   | IDENT_CURRENT('Cats')   | IDENT_CURRENT('Dogs')   |
|--------------+-------------------------+-------------------------|
| NULL         | 2                       | 1                       |
+--------------+-------------------------+-------------------------+

@@IDENTITY परिणाम शून्य है क्योंकि मैंने नए सत्र में पहचान कॉलम में कुछ भी नहीं डाला है।

IDENT_CURRENT() परिणाम NULL नहीं हैं, क्योंकि इसका परिणाम तालिका पर आधारित है - सत्र पर नहीं।

@@IDENTITY बनाम SCOPE_IDENTITY() बनाम IDENT_CURRENT()

SQL सर्वर में IDENT_CURRENT बनाम @@ पहचान बनाम SCOPE_IDENTITY देखें:क्या अंतर है? एक साधारण उदाहरण के लिए जो इन तीन कार्यों के बीच के अंतरों से चलता है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SYSDATETIMEOFFSET () SQL सर्वर में उदाहरण (T-SQL)

  2. 2015 में SQL सर्वर डेटा प्लेटफ़ॉर्म अपग्रेड

  3. आप कैसे जांचते हैं कि SQL सर्वर में IDENTITY_INSERT चालू या बंद पर सेट है या नहीं?

  4. SQL सर्वर VARCHAR/NVARCHAR स्ट्रिंग में लाइन ब्रेक कैसे सम्मिलित करें?

  5. डेटाबेस मेल (SSMS) के लिए एक डिफ़ॉल्ट सार्वजनिक प्रोफ़ाइल सेट करें