SQL सर्वर 2008 में तालिका उपनाम के साथ अद्यतन SQL कैसे लिखें?


213

मेरे पास बहुत बुनियादी है UPDATE SQL-

UPDATE HOLD_TABLE Q SET Q.TITLE = 'TEST' WHERE Q.ID = 101;

इस क्वेरी में ठीक चलाता है Oracle, Derby, MySQL- लेकिन यह एसक्यूएल सर्वर 2008 में विफल रहता है निम्न त्रुटि के साथ:

"एमएसजी 102, लेवल 15, स्टेट 1, लाइन 1 'क्यू' के पास गलत सिंटैक्स।"

अगर मैं एसक्यूएल से "क्यू" उपनाम की सभी घटनाओं को हटाता हूं तो यह काम करता है।

लेकिन मुझे उपनाम का उपयोग करने की आवश्यकता है।


5
आपको एक उपनाम का उपयोग करने की आवश्यकता क्यों है? ऐसा नहीं लगता कि आपको इसकी आवश्यकता है।
मार्क बायर्स

5
हां - प्रोग्रामिंग दृष्टिकोण से मुझे इसकी आवश्यकता नहीं है। लेकिन मेरे पास एक मौजूदा / पुरानी लाइब्रेरी है जो टेबल एलियास के साथ सभी तरह की डीएमएल एसक्यूएल बनाती है। पुस्तकालय में कई तरह के जटिल तर्क होते हैं। अब पुस्तकालय में टेबल-अलायस से छुटकारा पाना एमएसक्यूएसएल के लिए काम करने के लिए मौजूदा तर्क को बदलने की तुलना में अधिक काम है। इसके अलावा जब कई टेबल शामिल होते हैं, तो मुझे टेबल-उर्फ करने की आवश्यकता होती है।
javauser71

जवाबों:


422

SQL सर्वर पर अपडेट स्टेटमेंट में अन्य उपनाम का उपयोग करने का सिंटैक्स निम्नानुसार है:

UPDATE Q
SET Q.TITLE = 'TEST'
FROM HOLD_TABLE Q
WHERE Q.ID = 101;

हालांकि यहां उर्फ ​​आवश्यक नहीं होना चाहिए।


2
हाँ !!! यह काम करता हैं। शीघ्र जवाब देने के लिए ध्न्यवाद। किसी भी संयोग से आप जानते हैं कि MSSQL सर्वर अपडेट के लिए ऐसे अपरंपरागत वाक्यविन्यास का समर्थन क्यों करता है?
javauser71

3
मार्क बायर्स - शानदार जवाब !! यह सिंटैक्स मुझे एक टिप्पणी चयनित कथन जोड़ने की अनुमति देता है, जो मुझे पहले चयन करके अपडेट का परीक्षण करने की अनुमति देता है (चयन से नीचे हाइलाइट करें और निष्पादित करें):SET Q.TITLE = 'TEST' -- SELECT *

2
अच्छा लगा। इससे जहां क्लॉज में इंटेलीजेंस का उपयोग करना आसान हो जाता है।
मैग्नस

वह उर्फ ​​नहीं है। यह सिर्फ पूरी तरह से योग्य 'table.column' नाम है: - /
स्कॉटवेलकर

18

आप हमेशा सीटीई , (कॉमन टेबुलर एक्सप्रेशन) ले सकते हैं ।

;WITH updateCTE AS
(
    SELECT ID, TITLE 
    FROM HOLD_TABLE
    WHERE ID = 101
)

UPDATE updateCTE
SET TITLE = 'TEST';

हाँ - यह भी काम करता है। लेकिन JDBC / Java प्रोग्राम के लिए यह एक प्रकार का जटिल सिंटैक्स है। आपके प्रतिक्रिया के लिए धन्येवाद।
javauser71

-1

Postgres के लिए विशेष मामला

उपरोक्त समाधानों की एक सूची मेरे लिए काम नहीं करेगी। तो, यहाँ Postgres के लिए समाधान

जैसा कि मैं एक आग हूँ मेरी क्वेरी

UPDATE table Q SET Q.is_active = FALSE ,Q.is_delete = TRUE WHERE Q.name = 'XYZ';

परिणाम: त्रुटि: स्तंभ "क्ष" संबंध का "तालिका" मौजूद नहीं है

समाधान यह होगा कि आपको SET डेटा मान पर एलिस का उपयोग करने की आवश्यकता नहीं है

UPDATE table Q SET is_active = FALSE ,is_delete = TRUE WHERE Q.name = 'XYZ';

हाय रौनक, आपके उत्तर को अस्वीकार कर दिया क्योंकि यह पोस्टग्रेज के लिए है और ऊपर टी-एसक्यूएल के लिए पहले से ही एक काम कर रहा समाधान है।
अल्पी मुरानी

hii @ AlpiMurányi क्या आप मुझे सुझाव दे सकते हैं कि मेरे मामले में क्या काम कर रहा है। ताकि मैं कार्यान्वित कर सकूं, पहले से ही मेरे उत्तर में त्रुटि का उल्लेख किया है
रौनक पटेल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.