2008-11-10 19 views
6

मैं SQL सर्वर 2005 में किसी तालिका से ईमेल पता रिकॉर्ड खींच रहा हूं, और sp_send_dbmail के साथ @recipients सूची के रूप में उपयोग करने के लिए एक एकल स्ट्रिंग बनाना चाहता हूं। तालिका में ईमेल एड्रेस नामक एक फ़ील्ड है और तालिका में 10 रिकॉर्ड हैं।यह SQL स्क्रिप्ट क्यों काम करता है?

मैं यह कर रहा हूँ:

DECLARE @email VARCHAR(MAX) 
SELECT 
    @email = ISNULL(@email + '; ', '') + EmailAddress 
FROM 
    accounts 

अब @email खाता तालिका से 10 ईमेल पते की एक अर्द्ध सीमांकित सूची है।

मेरे प्रश्न यह क्यों हैं/यह कैसे काम करता है? क्यों @email तालिका में अंतिम ईमेल पता नहीं है?

+0

मुझे नहीं पता, लेकिन यह एक बहुत अच्छा सवाल है। मैं जवाब देखने के लिए इंतजार नहीं कर सकता। – Kevin

+0

पिवॉट कमांड के लिए फ़ील्ड की स्ट्रिंग बनाने के लिए आज इसका इस्तेमाल किया गया। बहुत बढ़िया। खुशी है कि मैंने इसे बुकमार्क किया था। – BoltBait

उत्तर

5

क्योंकि प्रत्येक पंक्ति के लिए आप @email के वर्तमान मान को EmailAddress में अगले परिणाम के साथ जोड़ते हैं। स्ट्रिंग कॉन्सटेनेशन एक फ़ंक्शन को कॉल करने जैसा है, जिसमें अनुक्रम में प्रत्येक पंक्ति के परिणाम का मूल्यांकन करना चाहिए।

2

क्योंकि प्रति पंक्ति एक बार संगतता अभिव्यक्ति का मूल्यांकन किया जाता है।

+0

आपका उत्तर संक्षेप में है और, मेरे दिमाग में, सबसे संक्षेप में सवाल का जवाब दें। – jons911

4

आप 3 पते हैं कहते हैं:

[email protected] 
[email protected] 
[email protected] 

पहली पंक्ति के लिए, @emailNULL है, इसलिए यह "" + "[email protected]", तो "[email protected]" हो जाता है।

दूसरी पंक्ति के लिए, @email"[email protected]" + "; " + "[email protected]" बन जाता है, इसलिए "[email protected]; [email protected]"

अंतिम पंक्ति के लिए, @email"[email protected]; [email protected]" + "; " + "[email protected]" बन जाता है, इसलिए "[email protected]; [email protected]; [email protected]"

1

आपका चयन पंक्तियों का चयन नहीं कर रहा है - प्रदर्शन के लिए - यह बार-बार एक ही चर के लिए एक अभिव्यक्ति को जोड़ रहा है। तो अंत में, आप दिखाने के लिए छोड़ दिया है वैरिएबल है।

संभावित रूप से आप बैच फ़ाइल में किसी अन्य पंक्ति के साथ पाते हैं, उदा। "का चयन करें @email"

सोचें:

परिणाम = "" + name1
परिणाम = परिणाम + NAME2
परिणाम = परिणाम + NAME3
आदि

संभवत: आपको लगता है कि चयन में सोच रहे हैं परिवर्तनीय = अभिव्यक्ति एक संयोजन असाइनमेंट और चयन है; लेकिन यह वास्तव में सिर्फ एक असाइनमेंट है। किसी भी मामले में, प्रत्येक पंक्ति के लिए @email पुन: प्रारंभ नहीं किया गया है।

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