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

SQL सर्वर में सेलेक्ट से अपडेट कैसे करें

अधिकांश परिस्थितियों में, SQL अद्यतन प्रत्यक्ष संदर्भ का उपयोग करके निष्पादित किए जाते हैं किसी विशेष तालिका में (UPDATE books SET books.title = 'The Hobbit' WHERE books.id = 1 ) फिर भी, कभी-कभी, तालिका की सामग्री को अप्रत्यक्ष रूप से में परिवर्तन करना फायदेमंद साबित हो सकता है , द्वितीयक क्वेरी स्टेटमेंट से प्राप्त डेटा के सबसेट का उपयोग करके।

एक UPDATE प्रदर्शन कर रहा है एक द्वितीयक SELECT का उपयोग करना कथन को दो तरीकों में से एक में पूरा किया जा सकता है, मुख्य रूप से यह निर्भर करता है कि आप SQL सर्वर के किस संस्करण का उपयोग कर रहे हैं। हम संक्षेप में दोनों विकल्पों का पता लगाएंगे ताकि आप पा सकें कि आपके लिए सबसे अच्छा क्या काम करता है।

इनर जॉइन का उपयोग करना

सभी SQL सर्वर स्थापनाओं के लिए, इस क्रिया को करने का सबसे बुनियादी तरीका INNER JOIN का उपयोग करना है , जिससे दो अलग-अलग तालिकाओं के स्तंभों में मानों की एक दूसरे से तुलना की जाती है।

UPDATE
  books
SET
  books.primary_author = authors.name
FROM
  books
INNER JOIN
  authors
ON
  books.author_id = authors.id
WHERE
  books.title = 'The Hobbit'

ऊपर दिए गए उदाहरण में, हम UPDATING books.primary_author authors.name . से मेल खाने के लिए फ़ील्ड JOINING . द्वारा 'द हॉबिट' के लिए क्वेरी में दोनों तालिकाएं authors.id . के संबंधित, मेल खाने वाले मानों से संबंधित हैं और books.author_id

एक साथ अपडेट और INSERT के लिए MERGE का उपयोग करना

SQL Server 2008 और नए के लिए, Microsoft ने असाधारण रूप से उपयोगी MERGE . पेश किया ऑपरेशन जो उपरोक्त INNER JOIN . के समान है विधि, लेकिन MERGE UPDATE दोनों को निष्पादित करने का प्रयास करता है और एक INSERT एक साथ आदेश। यह प्रदर्शन की गई क्वेरी के आधार पर दो तालिकाओं को प्रभावी ढंग से सिंक्रनाइज़ करता है, दोनों के मिलान के लिए आवश्यक रिकॉर्ड को अद्यतन और सम्मिलित करता है।

MERGE INTO
  books
USING
  authors
ON
  books.author_id = authors.id
WHEN MATCHED THEN
  UPDATE SET
    books.primary_author = authors.name
WHEN NOT MATCHED THEN
  INSERT
    (books.author_id, books.primary_author)
  VALUES
    (authors.id, authors.name)

MERGE . का उपयोग करते समय पूरी क्वेरी मूल INNER JOIN . की तुलना में निश्चित रूप से थोड़ा अधिक जटिल है , लेकिन एक बार जब आप समझ जाते हैं कि ऑपरेशन कैसे काम करता है, तो आप जल्दी से समझ जाएंगे कि यह क्षमता वास्तव में कितनी शक्तिशाली हो सकती है।

पहली कुछ पंक्तियाँ आत्म-व्याख्यात्मक हैं:

MERGE INTO
  books
USING
  authors
ON
  books.author_id = authors.id

हम MERGE INTO (UPDATE /INSERT ) books द्वितीयक authors . का उपयोग करके तालिका तालिका, और हम एक ही books.author_id = authors.id के आधार पर दोनों का मिलान कर रहे हैं तुलना।

जहां MERGE कमांड अलग-अलग ब्रांचिंग लॉजिक में है जो इस प्रकार है।

WHEN MATCHED THEN
  UPDATE SET
    books.primary_author = authors.name

यहां हम SQL को केवल तभी कार्रवाई करने के लिए कह रहे हैं जब रिकॉर्ड MATCHED . हो - जब कोई मौजूदा रिकॉर्ड पाया जाता है। उस स्थिति में, हम एक मानक UPDATE perform करते हैं जैसा हमने पहले किया था, books.primary_author . को सेट करना authors.name . के बराबर फ़ील्ड फ़ील्ड.

अंत में, यदि क्वेरी को एक मेल खाने वाले तुलनात्मक रिकॉर्ड का पता चलता है जो नहीं मौजूद हैं, हम इसके बजाय एक INSERT perform करते हैं ।

WHEN NOT MATCHED THEN
  INSERT
    (books.author_id, books.primary_author)
  VALUES
    (authors.id, authors.name)

यहां हम केवल SQL को INSERT . के लिए कह रहे हैं books . में एक नया रिकॉर्ड author_id . के मानों के साथ तालिका और पासिंग और primary_author संबंधित authors . से लिए गए फ़ील्ड टेबल रिकॉर्ड।

हमारे MERGE . का अंतिम परिणाम कथन यह है कि प्रत्येक . के लिए authors . में लेखक तालिका में, हम सत्यापित करते हैं कि क्या संबंधित पुस्तक books . में मौजूद है . यदि कोई रिकॉर्ड मिलता है, तो हम सुनिश्चित करते हैं कि books.primary_author UPDATE using का उपयोग करके सेट किया गया है , और जहां कोई मिलान नहीं मिलता है, हम books . में एक नया रिकॉर्ड जोड़ते हैं ।

इसके साथ, आपको दो अलग-अलग तरीकों की ठोस समझ होनी चाहिए जिनका उपयोग UPDATE . करने के लिए किया जा सकता है द्वितीयक, तुलनात्मक SELECT . का उपयोग करके SQL में रिकॉर्ड बयान।


  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. SQL सर्वर नवीनतम संस्करण, संस्करण और SQL सर्वर इतिहास

  4. SqlBulkCopy के लिए अनुशंसित बैच आकार क्या है?

  5. SQL सर्वर कॉम्पैक्ट की सीमाएँ क्या हैं? (या - एमएस प्लेटफॉर्म पर उपयोग करने के लिए कोई डेटाबेस कैसे चुनता है?)