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

नई SQL रिकॉर्ड आईडी प्राप्त करें

SELECT SCOPE_IDENTITY() 

@@ पहचान का उपयोग करने से अनपेक्षित परिणाम हो सकते हैं, इसलिए सावधान रहें कि आप उसका उपयोग कैसे करते हैं। अन्य तालिकाओं में रिकॉर्ड डालने वाले ट्रिगर @@ पहचान मान को बदल देंगे - जहां SCOPE_IDENTITY() आपको केवल आपके वर्तमान दायरे से अंतिम पहचान देगा।

यहां एक नमूना दिया गया है जो @@ पहचान और SCOPE_INSERT() के बीच का अंतर दिखाएगा और वे अलग-अलग मान कैसे लौटा सकते हैं..

use tempdb
go
create table table1
    (ID int identity)
go
create table table2
    (ID int identity(100, 1))
go
create trigger temptrig 
    on table1 
    for insert
as
begin

    insert  table2 
     default values;

end
go
insert  table1 
default values;
select  SCOPE_IDENTITY(), 
        @@IDENTITY

एक अन्य विकल्प जिस पर यहां किसी ने चर्चा नहीं की है, वह है OUTPUT क्लॉज का उपयोग करना जो कि SQL 2005 में है। इस मामले में, आपको केवल अपने इंसर्ट में आउटपुट क्लॉज जोड़ना होगा, और फिर उस रिकॉर्डसेट को अपने कोड से पकड़ना होगा। यह केवल 1... के बजाय एकाधिक रिकॉर्ड सम्मिलित करते समय अच्छी तरह से काम करता है...

use tempdb
go
create table table1
    (ID int identity)
go
insert   table1 
output   inserted.ID
default values;
--OR...
insert   table1 
output   inserted.$identity
default values;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर में फ़ंक्शन-आधारित अनुक्रमणिका

  2. एकल SQL क्वेरी में एकाधिक पंक्तियाँ सम्मिलित करना?

  3. जब IDENTITY_INSERT को OFF पर सेट किया जाता है, तो तालिका 'तालिका' में पहचान कॉलम के लिए स्पष्ट मान सम्मिलित नहीं किया जा सकता है

  4. वर्तमान वर्कस्टेशन नाम लौटाएं जो SQL सर्वर (T-SQL) से जुड़ा है

  5. SQL सर्वर (C# क्लाइंट) में बहुत अधिक डेटा सम्मिलित करने का सबसे तेज़ तरीका क्या है