2010-12-01 23 views
6

मैं निम्न तालिका जो मैं 'उदाहरण'एसक्यूएल का उपयोग करके, मैं अपने मूल्यों का उपयोग करके पंक्तियों को कैसे अपडेट करूं?

id name  last_name 
01 Adam  Adams 
02 Bill  Billo 
03 Cathy  McCathyson 

मैं तालिका को संशोधित करने और निम्नलिखित के साथ खत्म करने की जरूरत है फोन करता हूँ है:

id name 
01 Adam Adams 
02 Bill Billo 
03 Cathy McCathyson 

एक ही पंक्ति के लिए, मुझे पता है कि इस क्वेरी लिखने के लिए:

UPDATE example SET name = 
    (SELECT name FROM example WHERE id = 01)+" " 
    +(SELECT last_name FROM example WHERE id = 01) 
WHERE id = 01; 

मैं इस क्वेरी यह उस पंक्ति के मूल्यों के साथ प्रत्येक पंक्ति को अद्यतन करता, उदाहरण के रूप में ऐसी है कि कैसे संपादित कर सकता

संपादित करें: मैंने इस उदाहरण को भ्रमित करने के बाद से अपना उदाहरण अपडेट कर दिया है।

+2

क्या आप का मतलब है कि आप डीबी डेटा में एचटीएमएल एम्बेड करना चाहते हैं? क्यूं कर? – n8wrl

+1

यह एक अच्छा उदाहरण है डेटाबेस में एचटीएमएल एम्बेड करना बुरा विचार क्यों है। आप रंग को संग्रहित करने और एप्लिकेशन में एचटीएमएल उत्पन्न करने से बेहतर रहे होंगे। –

+0

परीक्षण डेटा में बदलाव के लिए कोई कारण? – Sathya

उत्तर

8
UPDATE example SET NAME = NAME + ' ' + last_name 

ID NAME  LAST_NAME 

 1 Adam  Adams 
    2 Bill  Billo 
    3 Cathy  McCathyson 

SQL> UPDATE example SET NAME = NAME + ' ' + last_name 
    2/

3 rows updated 

SQL> select * from example 
    2/

     ID NAME     LAST_NAME 
---------- ----------------------------------------- 
     1 Adam Adams    Adams 
     2 Bill Billo    Billo 
     3 Cathy McCathyson  McCathyson 
के कम कुशल उपयोग पर फिट होगा अनावश्यक पात्रों में से एक बहुत भंडारण किया जाएगा
+0

अपना परीक्षण केस जोड़ा गया। गणना के कॉलम के लिए – Sathya

4

एनबी: यह उत्तर प्रश्न के पहले अवतार पर आधारित था। समान सामान्य सिद्धांत संशोधित संस्करण पर लागू होते हैं, इसलिए मैंने synch में रखने के लिए कॉलम नाम अपडेट नहीं किए हैं।

@ n8wrl टिप्पणियों में एक अच्छा सवाल उठाता है लेकिन आपके प्रश्न का उत्तर देने के लिए (यह मानते हुए कि रंग और पाठ दोनों चरित्र डेटा हैं और इसलिए किसी भी कास्टिंग की आवश्यकता नहीं है)।

इसके अलावा मैंने यह भी माना है कि कॉलम में से कोई भी शून्य नहीं है। यदि वे NULL को संयोजित कर रहे हैं तो NULL उत्पन्न होगा मान लें कि आपके पास एएनएसआई डिफ़ॉल्ट विकल्प हैं। अगर वह वांछित व्यवहार नहीं है आप का उपयोग करने की आवश्यकता होगी ISNULL(color,'') आदि

DECLARE @example table 
(
id int NOT NULL, 
color char(6) NOT NULL, 
text varchar(100) NOT NULL 
) 
insert into @example 
SELECT 01, '990000', 'Red' UNION ALL 
SELECT 02, '009900', 'Green' UNION ALL 
SELECT 03, '000099', 'Blue' 

UPDATE @example SET text = '<span style=''color: #' 
    +color+'''>' 
    +text+'</span>' 
/*WHERE id = 01;*/ 

SELECT * FROM @example 

मैं कहना है मुझे शक है कि यह है कि इस प्रारूप में भंडारण एक अच्छा विचार है। इसका मतलब है कि आप जिसका मतलब है कम पंक्तियों एक डेटा पेज और अधिक से अधिक मैं/हे और स्मृति

+0

यह केवल 01 की आईडी के साथ पंक्ति के लिए काम करता है। क्या आप कह रहे हैं कि यदि मैं WHERE क्लॉज को बंद करता हूं, तो यह हर पंक्ति के लिए काम करेगा? –

+0

यदि आप पूरी तालिका करने की कोशिश कर रहे हैं, तो 'WHERE' खंड की आवश्यकता नहीं है। – mlibby

+0

किसी भी स्थिति में अपना WHERE बदलें और यह मानदंडों को पूरा करने वाली किसी भी पंक्ति के लिए होगा - यदि कोई भी शामिल नहीं है तो सभी पंक्तियां। –

7

आप इसे computed column के रूप में जोड़ने पर विचार करना चाहेंगे। इस तरह कॉलम आभासी है, इसलिए आप अतिरिक्त संग्रहण स्थान का उपयोग नहीं कर रहे हैं। साथ ही, किसी भी हस्तक्षेप के बिना नए कॉलम में नाम या last_name में कोई भी परिवर्तन स्वचालित रूप से दिखाई देता है।

EDIT: उदाहरण में परिवर्तन के आधार पर संशोधित कोड।

alter table example 
    add full_name as coalesce(name+' ','') + last_name 
+0

+1 - आमतौर पर एक सौंदर्य परिवर्तन के लिए अपने मूल डेटा को संपादित करने का अच्छा विचार नहीं है :) – JNK

+1

+1 किसी गणना किए गए कॉलम के बिना, आप मूल प्रथम/अंतिम विभाजन खो देते हैं। वहां से कोई वापसी नहीं है! –

+0

+1 क्योंकि यह कुछ शानदार है जिसे मैं नहीं जानता था। मेरे वास्तविक डेटा के साथ, मुझे हालांकि गठबंधन और खत्म करने की आवश्यकता है, इसलिए मुझे खेद है कि मैंने यह जवाब नहीं चुना। धन्यवाद हालांकि, जो! –

संबंधित मुद्दे

 संबंधित मुद्दे