2010-06-01 13 views
9

यह here पर डुप्लिकेट जैसा दिख सकता है, लेकिन ऐसा नहीं है। मैं एक सर्वोत्तम अभ्यास पाने की कोशिश कर रहा हूं, एक तकनीकी उत्तर नहीं (जिसे मैं पहले से ही जानता हूं (सोच) मुझे पता है)।एसक्यूएल वैरिएबल चुनें - क्या मुझे इस वाक्यविन्यास का उपयोग करने से बचाना चाहिए और हमेशा एसईटी का उपयोग करना चाहिए?

SQL सर्वर के लिए नया और अच्छी आदतें बनाने की कोशिश कर रहा है।
मैं SET @var = और SELECT @var =
यहाँ के बीच कार्यात्मक अंतर का एक बड़ा स्पष्टीकरण पाया: http://vyaskn.tripod.com/differences_between_set_and_select.htm
संक्षेप में प्रत्येक क्या है कि अन्य नहीं (उदाहरण के लिए स्रोत देखें) है:

सेट:

  1. एएनएसआई और पोर्टेबल, माइक्रोसॉफ्ट द्वारा अनुशंसित।
  2. SET @var = (SELECT column_name FROM table_name) विफल रहता है जब चयन एक मूल्य के बाद अधिक मूल्य देता है, अप्रत्याशित परिणामों की संभावना को समाप्त करता है।
  3. SET @var = (SELECT column_name FROM table_name)@var को NULL पर सेट करेगा यदि SELECT column_name FROM table_name वापस आया है, इस प्रकार @var को इसके पहले के मूल्य पर कभी नहीं छोड़ा गया है।

का चयन करें: (मेरे परीक्षण के अनुसार)

  1. एकाधिक चर एक बयान
  2. विभिन्न सिस्टम चर पहले DML कथन
  3. SELECT @var = column_name FROM table_name को @var स्थापित करेगा द्वारा निर्धारित वापस लौटा सकते में सेट किया जा सकता चयन द्वारा लौटा अंतिम मूल्य। यह एक सुविधा या एक बग हो सकता है। व्यवहार SELECT @j = (SELECT column_name FROM table_name) वाक्यविन्यास के साथ बदला जा सकता है।
  4. गति। एकाधिकएकल एकाधिक चर/चयन विवरणों के विपरीत चयन कथन अधिक तेज है। उनके बिंदु को साबित करने के लिए उनके पास नमूना परीक्षण है। यदि आप अन्यथा साबित करने के लिए एक परीक्षण तैयार कर सकते हैं, तो इसे लाओ!

तो, मैं क्या करूँ?

  • (लगभग) हमेशा SET @var = उपयोग करते हैं, SELECT @var = का उपयोग कर गंदा कोडिंग और मानक नहीं है।

    या

  • उपयोग SELECT @var = स्वतंत्र रूप से, यह मेरे लिए अधिक हासिल कर, जब तक कि कोड एक और पर्यावरण के लिए भेजा जा सकता है।

धन्यवाद

+0

एक wellwritten प्रश्न के लिए +1 और अभिलेखागार की खोज होने के लिए। –

उत्तर

2

मेरी राय है - SET @var = 'hardcoded_value' जैसे सरल संचालन के लिए एसईटी का उपयोग करें और एक टेबल से ट्रिकर असाइनमेंट करने के लिए चयन का उपयोग करें। मैं लगभग हमेशा लिखता हूं कि मेरे इरादे को कंपाइलर और किसी अन्य डेवलपर दोनों को स्पष्ट करने के लिए निम्नलिखित तरीके से चयन करें: SELECT TOP 1 @var = col_name FROM some_table

अगर मैं पोर्टेबिलिटी के बारे में चिंतित था तो मैं टी-एसक्यूएल नहीं लिखूंगा और इसके बजाय इसके बजाय डेटा एक्सेस के लिए एक ओआरएम परत के साथ चिपके रहेंगे।

संपादित करें, बोनस टिप: एसक्यूएल 08 में मैं इस वाक्य जो T-SQL के लिए काफी संक्षिप्त है का उपयोग कर पसंद:

DECLARE @var int = (SELECT col_name FROM some_table)

+0

मैं मानता हूं, संग्रहीत प्रोसेस आसानी से बंदरगाह नहीं जा रहे हैं क्योंकि कोई डेटाबेस वास्तव में एएनएसआई मानक का समर्थन नहीं करता है। – roufamatic

0

और भी बहुत कुछ कहने के लिए के रूप में लेख आप अपने आप को पहले से ही उल्लेख यह अच्छी तरह शामिल किया गया है नहीं छोड़ा है।

क्या आपके लिए मानक महत्वपूर्ण हैं? यदि आपका उत्तर 'हां' है, तो आपको एसईटी का उपयोग करना चाहिए।

मेरे अपने मानकों के अनुसार, मैं वास्तव में दूसरे पर एक का उपयोग नहीं करता, यह ग्रहों के संरेखण पर निर्भर करता है। लेख पढ़ने के बाद, मुझे कबूल करना होगा कि SET के लिए मुझे थोड़ा वरीयता है।

+0

मानकों _are_ महत्वपूर्ण हैं, लेकिन मुझे इस तथ्य से पहले प्रतीत नहीं होता है कि SELECT मुझे एक बार में कई चर सेट करने की अनुमति देता है। –

+1

यदि आप यही चिंतित हैं तो चिंता न करें और इस तरह से चयन का उपयोग करें। यह काम पूरा हो जाता है, मेरा विश्वास करो! – eddiegroves

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