दिलचस्प पोस्ट
एंड्रॉइड एसडीके के लिए फास्ट बिटमैप ब्लर एंड्रॉइड: किस परिस्थिति में एक संवाद प्रदर्शित होने वाला कारण () को कॉल किया जाना चाहिए? SIGPIPEs को कैसे रोकें (या उन्हें ठीक से संभाल) जावास्क्रिप्ट: वस्तु का नाम बदलें कुंजी नेस्टेड एनजी-दोहरा में 2 $ इंडेक्स वैल्यू को पारित करना XmlDocument का उपयोग करते हुए XML विशेषता पढ़ें एक आधार प्रकार को एक व्युत्पन्न प्रकार का ढांचा देने का एक तरीका बेस 64 सांकेतिक शब्दों में बदलना और डीकोड उदाहरण कोड JQuery और AJAX के साथ बुनियादी एथ का उपयोग कैसे करें? HTML पाठ इनपुट केवल संख्यात्मक इनपुट की अनुमति देता है कैसे django के रूप में ग्रुप द्वारा क्वेरी करने के लिए? NHibernate इएसशन फ्लश: इसका उपयोग कब और कब किया जाए, और क्यों? मैं जावा में स्ट्रिंग से एक फ़ाइल एक्सटेंशन कैसे ट्रिम कर सकता हूं? पूर्णांक की एक धारा से चलने वाली माध्य खोजें एमवीवीएम के साथ डब्ल्यूपीएफ में संवाद के लिए अच्छा या बुरा अभ्यास?

SQL सर्वर 2005 में एक बयान में दो तालिकाओं को अपडेट करने के लिए कैसे?

मैं एक बार में दो तालिकाओं को अपडेट करना चाहता हूं मैं SQL सर्वर 2005 में कैसे करूँ?

UPDATE Table1, Table2 SET Table1.LastName='DR. XXXXXX', Table2.WAprrs='start,stop' FROM Table1 T1, Table2 T2 WHERE T1.id = T2.id AND T1.id = '010008' 

वेब के समाधान से एकत्रित समाधान "SQL सर्वर 2005 में एक बयान में दो तालिकाओं को अपडेट करने के लिए कैसे?"

आप एक बयान में कई तालिकाओं को अपडेट नहीं कर सकते, हालांकि, आप यह सुनिश्चित करने के लिए एक लेनदेन का उपयोग कर सकते हैं कि दो UPDATE स्टेटमेंट परमाणु रूप से व्यवहार किया जाता है आप एक गोल यात्रा से बचने के लिए उन्हें बैच भी कर सकते हैं।

 BEGIN TRANSACTION; UPDATE Table1 SET Table1.LastName = 'DR. XXXXXX' FROM Table1 T1, Table2 T2 WHERE T1.id = T2.id and T1.id = '011008'; UPDATE Table2 SET Table2.WAprrs = 'start,stop' FROM Table1 T1, Table2 T2 WHERE T1.id = T2.id and T1.id = '011008'; COMMIT; 

आप दो तालिकाओं को एक बार में अपडेट नहीं कर सकते हैं, लेकिन आप इनसे उपयोग करके एक डालने में एक अद्यतन को लिंक कर सकते हैं, और आप दूसरे आउटपुट के लिए इस आउटपुट को शामिल कर सकते हैं।

 DECLARE @ids TABLE (id int); BEGIN TRANSACTION UPDATE Table1 SET Table1.LastName = 'DR. XXXXXX' OUTPUT INSERTED.id INTO @ids WHERE T1.field = '010008'; UPDATE Table2 SET Table2.WAprrs = 'start,stop' FROM Table2 JOIN @ids i on i.id = Table2.id; COMMIT; 

मैंने आपकी उदाहरण WHERE स्थिति को आईडी से कुछ ओथर फ़ील्ड में बदल दिया है, यदि आईडी है तो आपको इस फैंसी आउटपुट की आवश्यकता नहीं है, तो आप उसी आईडी = '010008' के लिए दूसरी तालिका को अपडेट कर सकते हैं।

क्षमा करें, एफ़िक, आप ऐसा नहीं कर सकते दो अलग-अलग तालिकाओं में विशेषताओं को अपडेट करने के लिए, आपको दो अलग बयानों को निष्पादित करने की आवश्यकता होगी। लेकिन वे एक बैच में हो सकते हैं (एसक्यूएल का एक सेट एक राउंड ट्रिप में सर्वर को भेजा गया है)

इसका संक्षिप्त जवाब नहीं है जब आप एक अद्यतन कथन के खंड में से एक from अधिक तालिकाओं को दर्ज कर सकते हैं, तो आप update कीवर्ड के बाद केवल एक ही तालिका निर्दिष्ट कर सकते हैं। भले ही आप "अपडेट करने योग्य" दृश्य लिखते हैं (जो कि केवल कुछ प्रतिबंधों का पालन करने वाला एक दृश्य है), इस तरह के अपडेट विफल हो जाएंगे यहां एमएसडीएन दस्तावेज़ीकरण (जोर मेरा है) से संबंधित क्लिप हैं

अपडेट (ट्रांक्ट-एसक्यूएल)

Table_or_view_name द्वारा संदर्भित दृश्य को अद्यतन करने योग्य होना चाहिए और दृश्य के FROM खंड में एक आधार तालिका का संदर्भ होना चाहिए। अपडेट करने योग्य दृश्यों के बारे में अधिक जानकारी के लिए, व्यस्था देखें (ट्रांसएक्ट-एसक्यूएल) देखें।

दृश्य बनाएं (ट्रांसएक्ट-एसक्यूएल)

आप एक दृश्य के आधार पर आधारभूत आधार तालिका के डेटा को संशोधित कर सकते हैं, जब तक कि निम्नलिखित स्थितियां सत्य हैं:

  • अद्यतन, INSERT, और DELETE स्टेटमेंट सहित कोई भी संशोधन, केवल एक आधार तालिका से कॉलम को संदर्भित करना चाहिए।
  • दृश्य में संशोधित किए गए कॉलम को सीधे तालिका स्तंभों में अंतर्निहित डेटा का संदर्भ देना होगा। कॉलम किसी भी अन्य तरीके से प्राप्त नहीं हो सकते हैं, जैसे कि निम्नलिखित के माध्यम से:
    • एक समग्र कार्य: औसत, COUNT, SUM, MIN, MAX, GROUPING, STDEV, STDEVP, VAR, और VARP।
    • एक गणना स्तंभ को किसी अन्य कॉलम का उपयोग करने वाले एक अभिव्यक्ति से गणना नहीं किया जा सकता है। कॉल ऑपरेटर यूनियन, यूनियन ऑल, क्रॉसजॉइन, अन्तर्निहित और इंटरसीट राशि का उपयोग करके एक कंप्यूटेशन के द्वारा बनाई गई और अपडेट करने योग्य नहीं हैं।
  • संशोधित स्तंभों को ग्रुप BY, होविंग, या विच्छेदन से प्रभावित नहीं किया जाता है।
  • चोटी का उपयोग विकल्प के चयन के साथ कहीं भी नहीं किया जाता है साथ-साथ चैक ऑप्शन क्लॉज के साथ।

सभी ईमानदारी में, हालांकि, आपको एलबीशकिन के उदाहरण के अनुसार एक लेनदेन के भीतर दो अलग-अलग SQL बयानों का उपयोग करने पर विचार करना चाहिए।

अद्यतन करें: मेरा मूल दावा है कि आप अपडेट करने योग्य दृश्य में कई तालिकाओं को अपडेट कर सकते थे। SQL सर्वर 2005 और 2012 पर, यह निम्न त्रुटि उत्पन्न करेगा मैंने यह जवाब देने के लिए मेरा जवाब सही किया है

Msg 4405, Level 16, State 1, Line 1

View or function 'updatable_view' is not updatable because the modification affects multiple base tables.

आपको लेनदेन के अंदर दो अपडेट स्टेटमेंट्स रखना चाहिए

यह MySQL के लिए काम करता है और वास्तव में केवल एक निहित लेन-देन है लेकिन इसे इस तरह कुछ जाना चाहिए:

 UPDATE Table1 t1, Table2 t2 SET t2.field = t2.field+2, t1.field = t1.field+2 WHERE t1.id = t2.foreign_id and t2.id = '123414' 

यदि आप बहु सारणी के लिए अद्यतन कर रहे हैं जो बहु वक्तव्यों की आवश्यकता होती है … जो संभव है यदि आप एक को अपडेट करते हैं, तो दूसरे अन्य स्थितियों के आधार पर … आपको लेनदेन का उपयोग करना चाहिए

आप एक तालिका के लिए अद्यतन कथन लिख सकते हैं और फिर पहली तालिका अपडेट पर एक ट्रिगर , जो दूसरी तालिका को अपडेट करता है