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

SQL - INSERT के साथ Scope_Identity() - रिकॉर्ड आईडी प्राप्त करना

आप पहली बार में कई बयानों में ऐसा क्यों कर रहे हैं? क्यों नहीं:

INSERT dbo.Items (item_name,  item_cost, item_code) 
  OUTPUT inserted.ItemID, @ProjectID, @ItemQuantity 
  INTO dbo.project_items(item_id, project_id, item_quantity)
VALUES (@ItemName, @ItemCost, @ItemCode);

अब आपको केवल एक ExecuteNonQuery() . को कॉल करना होगा और आपके ऐप को वास्तव में SCOPE_IDENTITY() . की परवाह नहीं है मूल्य उत्पन्न। (आप अभी भी SCOPE_IDENTITY() retrieve को पुनः प्राप्त कर सकते हैं यदि आप चाहते हैं, तो निश्चित रूप से, ExecuteScalar . का उपयोग करके - लेकिन जैसा कि नेनाद ने ठीक ही कहा है, दोनों को कॉल करने के बजाय किसी एक को चुनें।)

चूँकि अब हम जानते हैं कि यहाँ एक स्पष्ट विदेशी कुंजी है, हम अभी भी आपके C# कोड को एक कॉल में कम कर सकते हैं, भले ही हम OUTPUT का उपयोग न कर सकें। खंड।

DECLARE @i INT;

INSERT dbo.Items (item_name,  item_cost, item_code) 
  SELECT @ItemName, @ItemCost, @ItemCode;

SELECT @i = SCOPE_IDENTITY();

INSERT dbo.project_items(item_id, project_id, item_quantity)
  SELECT @i, @ProjectID, @ItemQuantity 

SELECT @i; -- if necessary

इसे संग्रहित प्रक्रिया में रखना और भी अधिक साफ होगा।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. देखें कि क्या तालिका में OBJECTPROPERTY () का उपयोग करके SQL सर्वर में एक डिफ़ॉल्ट बाधा है

  2. Microsoft Sql Server 2008R2 और इसके बाद के संस्करण पर लॉगिन के लिए डेटाबेस छिपाना

  3. SQL सर्वर में मर्ज किए बिना 5000+ पंक्तियों को अप्सर्ट करने का सबसे कुशल/सर्वोत्तम अभ्यास क्या है?

  4. केस-असंवेदनशील प्राथमिक कुंजी प्रकार nvarchar जहां !=ss

  5. माइक्रोसॉफ्ट एसक्यूएल सर्वर 2008 में एक क्वेरी चलाने से पहले कैसे पता चलेगा कि कितनी पंक्तियां प्रभावित होंगी?