दिलचस्प पोस्ट
पायथन में सिंगलटन बनाना ReferenceError: फ़ायरफ़ॉक्स में घटना को परिभाषित नहीं किया गया है MathML और जावा पैनल में एक जटिल छवि जोड़ें, इसके चारों ओर एक अनुकूलित उपयोगकर्ता इंटरफ़ेस में बटन छवि की ऊंचाई और चौड़ाई जावा का उपयोग कैसे करें? गिट रेपो से कई फ़ाइलों को हटाने से पहले ही डिस्क से हटा दिया गया है Jquery live () बनाम प्रतिनिधि () JQuery के बिना माता पिता के पूर्ण दायरे के बच्चे तत्व को मँडरा करते हुए ऑनसाइट पर रोकें वाई अंक का पेज एक्स जर्सी 415 असमर्थित मीडिया प्रकार स्विंग में गतिशील जीयूआई कैसे कार्यान्वित करें एक स्थापित एनपीएम पैकेज का संस्करण खोजें माउस स्थिति प्राप्त करें घटनाओं और प्रतिनिधियों और इसके संबंधित अनुप्रयोगों के बीच का अंतर ValueError: एक अनुक्रम के साथ एक सरणी तत्व सेट करना

SQL सर्वर में कब मैं सेमीकॉलन का उपयोग करना चाहिए?

वेब पर कुछ कोड की जाँच करते हुए और SQL सर्वर प्रबंधन स्टूडियो द्वारा उत्पन्न लिपियों को मैंने देखा है कि कुछ बयान अर्धविराम के साथ समाप्त हो गए हैं I

तो मुझे इसका उपयोग कब करना चाहिए?

वेब के समाधान से एकत्रित समाधान "SQL सर्वर में कब मैं सेमीकॉलन का उपयोग करना चाहिए?"

केन पॉवर्स द्वारा SQLServerCentral.Com आलेख से:

अर्धवियन

अर्धविराम चरित्र एक वक्तव्य टर्मिनेटर है। यह एएनएसआई एसक्यूएल -92 मानक का एक हिस्सा है, लेकिन लेनदेन-एसक्यूएल में कभी इसका इस्तेमाल नहीं किया गया था। दरअसल, टी-एसक्यूएल को कभी-कभी बिना अर्धविराम का सामना करने के लिए संभवतः कोड लिखना संभव था।

प्रयोग

दो स्थितियों में आपको अर्धविराम का उपयोग करना चाहिए। पहली स्थिति है, जहां आप आम टेबल अभिव्यक्ति (सीटीई) का उपयोग करते हैं, और सीटीई बैच में पहला वक्तव्य नहीं है। दूसरा, जहां आप एक सेवा ब्रोकर बयान जारी करते हैं और सेवा ब्रोकर बयान बैच में पहला बयान नहीं है।

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

यदि आप केवल एक कथन भेज रहे हैं, तो तकनीकी तौर पर आप कथन टर्मिनेटर के साथ बांट सकते हैं; एक स्क्रिप्ट में, क्योंकि आप एक से अधिक कथन भेज रहे हैं, आपको इसकी आवश्यकता है

व्यवहार में, हमेशा टर्मिनेटर को शामिल करें, भले ही आप डेटाबेस को एक बयान भेज रहे हों।

संपादित करें: [विशेष RDBMS] द्वारा उन कथन वक्तव्य टर्मिनेटर के जवाब में आवश्यक नहीं है, जबकि यह सच हो सकता है, उन्हें एएनएसआई एसक्यूएल मानक द्वारा आवश्यक हैं। सभी प्रोग्रामिंग में, अगर हम कार्यक्षमता की हानि के बिना एक मानक का पालन कर सकते हैं, तो हमें चाहिए, क्योंकि तब न तो हमारे कोड या हमारी आदतों को एक मालिकाना विक्रेता से बंधा है।

कुछ सी कंपलर के साथ, मुख्य रिटर्न शून्य हो सकता है, भले ही स्टैंडर्ड को वापसी करने के लिए मुख्य आवश्यकता होती है। लेकिन ऐसा करने से हमारा कोड और खुद को कम पोर्टेबल बना देता है।

प्रोग्रामिंग में सबसे बड़ी कठिनाई प्रभावी रूप से नई चीजें नहीं सीख रही है, यह बुरी आदतों को उजागर करती है जिस हद तक हम पहली जगह में बुरी आदतों को प्राप्त करने से बच सकते हैं, यह हमारे लिए एक जीत है, हमारे कोड के लिए, और किसी को भी पढ़ने या हमारे कोड का उपयोग करने के लिए।

SQL2008 बोल में वे कहते हैं कि अगले रिलीज में अर्धविरामों की आवश्यकता होगी। इसलिए, हमेशा इसका उपयोग करें

संदर्भ:

  • ट्रांसएक्ट-एसक्यूएल सिंटैक्स कन्वेंशन (ट्रांसएक्ट-एसक्यूएल)
  • SQL Server 2008 R2 ("SQL सर्वर के भविष्य के संस्करण में समर्थित नहीं है" खंड, "Transact-SQL" क्षेत्र) में deprecated डेटाबेस इंजन सुविधाएँ

अगर मैं इसे सही ढंग से पढ़ता हूं, तो टीएसक्यूएल स्टेटमेंट्स को समाप्त करने के लिए अर्धविराम का उपयोग करने की आवश्यकता होगी। http://msdn.microsoft.com/en-us/library/ms143729%28v=sql.120%29.aspx

संपादित करें: मुझे SSMS 2008R2 के लिए एक प्लग-इन मिला है जो आपकी स्क्रिप्ट को प्रारूपित करेगा और अर्धविराम जोड़ देगा। मुझे लगता है कि यह अभी भी बीटा में है …

http://www.tsqltidy.com/tsqltidySSMSAddin.aspx

संपादित करें: मुझे एपेक्स एसक्यूएल नामक एक भी बेहतर उपकरण / प्लगइन मिला … http://www.apexsql.com/

व्यक्तिगत राय: उन्हें केवल तब ही उपयोग करें जहां वे आवश्यक हैं। (आवश्यक सूची के लिए उपरोक्त TheTXI का उत्तर देखें।)

चूंकि कंपाइलर की आवश्यकता नहीं है, इसलिए आप उन्हें पूरी तरह से रख सकते हैं, लेकिन क्यों? कंपाइलर आपको यह नहीं बताएगा कि आप कहां भूल गए, तो आप असंगत उपयोग के साथ समाप्त हो जाएंगे

[यह राय SQL सर्वर के लिए विशिष्ट है अन्य डेटाबेस में अधिक कड़े आवश्यकताओं हो सकती हैं यदि आप एकाधिक डेटाबेस पर चलने के लिए SQL लिख रहे हैं, तो आपकी आवश्यकताएं भिन्न हो सकती हैं।]

टीपीडीआई ऊपर वर्णित है, "एक स्क्रिप्ट में, क्योंकि आप एक से अधिक कथन भेज रहे हैं, आपको इसकी आवश्यकता है।" यह वास्तव में सही नहीं है आपको उनकी ज़रूरत नहीं है

 PRINT 'Semicolons are optional' PRINT 'Semicolons are optional' PRINT 'Semicolons are optional'; PRINT 'Semicolons are optional'; 

आउटपुट:

 Semicolons are optional Semicolons are optional Semicolons are optional Semicolons are optional 

आपको इसका उपयोग करना चाहिए

वक्तव्य समाप्त करने के लिए अर्धविराम का उपयोग करने का अभ्यास मानक है और वास्तव में कई अन्य डेटाबेस प्लेटफॉर्म में एक आवश्यकता है। एसक्यूएल सर्वर को केवल विशेष मामलों में अर्धवियन की आवश्यकता होती है-लेकिन ऐसे मामलों में जहां अर्धविराम की आवश्यकता नहीं है, किसी का उपयोग करने से समस्याएं पैदा नहीं होती हैं मैं दृढ़ता से अनुशंसा करता हूं कि आप सभी बयानों को अर्धविराम के साथ समाप्त करने का अभ्यास अपनाते हैं न केवल यह आपके कोड की पठनीयता में सुधार करेगा, लेकिन कुछ मामलों में यह आपको कुछ दुःख को बचा सकता है। (जब एक अर्धविराम आवश्यक होता है और निर्दिष्ट नहीं किया जाता है, तो त्रुटि संदेश SQL सर्वर का उत्पादन हमेशा बहुत स्पष्ट नहीं होता है।)

और सबसे महत्वपूर्ण:

एसक्यूएल सर्वर प्रलेखन इंगित करता है कि सेमीकॉलन के साथ टी-एसक्यूएल स्टेटमेंट को समाप्त नहीं करना एक पदावनत सुविधा है। इसका मतलब यह है कि दीर्घकालिक लक्ष्य उत्पाद के भविष्य के संस्करण में अर्धविराम के उपयोग को लागू करना है। यह आपके सभी बयानों को समाप्त करने की आदत में आने का एक और कारण है, यहां तक ​​कि जहां वर्तमान में यह आवश्यक नहीं है।

स्रोत: माइक्रोसॉफ्ट एसक्यूएल सर्वर 2012 टी-एसक्यूएल मूल सिद्धांतों इट्जिक बेन-गणान द्वारा


आप हमेशा क्यों उपयोग करना चाहिए का एक उदाहरण ; निम्नलिखित दो प्रश्न हैं (इस पोस्ट से कॉपी किए गए हैं):

 BEGIN TRY BEGIN TRAN SELECT 1/0 AS CauseAnException COMMIT END TRY BEGIN CATCH SELECT ERROR_MESSAGE() THROW END CATCH 

यहां छवि विवरण दर्ज करें

 BEGIN TRY BEGIN TRAN SELECT 1/0 AS CauseAnException; COMMIT END TRY BEGIN CATCH SELECT ERROR_MESSAGE(); THROW END CATCH 

यहां छवि विवरण दर्ज करें

मुझे अभी भी टी-एसक्यूएल के बारे में जानने के लिए बहुत कुछ है, लेकिन लेनदेन के लिए कुछ कोड तैयार करने में (और स्टैकवॉवरफ्लो और अन्य साइट्स के उदाहरणों पर आधारित कोड) मुझे एक ऐसा मामला मिला जहां ऐसा लगता है कि अर्धविराम की आवश्यकता है और अगर यह गायब है, बयान बिल्कुल भी निष्पादित नहीं होता है और कोई त्रुटि नहीं हुई है। ऐसा लगता है कि ऊपर के किसी भी उत्तर में शामिल नहीं किया गया है। (यह एमएस SQL ​​सर्वर 2012 का उपयोग कर रहा था।)

एक बार लेन-देन की इच्छा थी जिस तरह से मैं काम करता था, मैंने इसके चारों ओर एक कोशिश पकड़ने का फैसला किया, ताकि अगर कोई त्रुटि हो तो इसे वापस लाया जाए केवल ऐसा करने के बाद, लेन-देन नहीं किया गया था (एसएसएमएस इस बात की पुष्टि करता है कि विंडो को एक अच्छा संदेश के साथ बंद करने का प्रयास करते हुए आपको इस तथ्य के बारे में चेतावनी दी गई है कि एक अनचाही लेनदेन है

तो यह

 COMMIT TRANSACTION 

लेन-देन करने के लिए BEGIN TRY / END TRY ब्लॉक के ठीक बाहर काम किया, लेकिन ब्लॉक के अंदर यह होना ज़रूरी था

 COMMIT TRANSACTION; 

नोट कोई त्रुटि या चेतावनी प्रदान नहीं की गई है और कोई संकेत नहीं है कि लेन-देन अभी भी क्वेरी टैब को बंद करने का प्रयास करने तक अनवरत है।

सौभाग्य से यह इतनी बड़ी समस्या का कारण बनता है कि यह तुरंत स्पष्ट है कि एक समस्या है। दुर्भाग्य से कोई त्रुटि (वाक्यविन्यास या अन्यथा) की रिपोर्ट के बाद से यह तुरंत स्पष्ट नहीं था कि समस्या क्या थी

इसके विपरीत, रोलबैक लेन-देन सेगमेंट के साथ या बिना सेमी कैच ब्लॉक में समान रूप से अच्छा काम करता है।

इस पर कुछ तर्क हो सकता है लेकिन यह मनमानी और ऐलिस-इन-वंडरलैंड-आईश लगता है।

ट्रांसएक्ट-एसक्यूएल सिंटैक्स कन्वेंशन (ट्रांसएक्ट-एसक्यूएल) (एमएसडीएन) के अनुसार

ट्रांसएक्ट-एसक्यूएल स्टेटमेंट टर्मिनेटर यद्यपि SQL सर्वर के इस संस्करण में अधिकांश बयानों के लिए अर्धविराम की आवश्यकता नहीं है, लेकिन भविष्य के संस्करण में इसकी आवश्यकता होगी।

(यह भी देखें @ ग्रेरी लॉरी की टिप्पणी)

ऐसा प्रतीत होता है कि अर्धविराम का उपयोग कर्सर कार्यों के साथ नहीं किया जाना चाहिए: ओपन, फ़ेट, बंद और डेलोकैकेट मैं इसके साथ कुछ घंटों व्यर्थ था। मुझे बोल पर एक करीबी नज़र आया और देखा कि […] इन कर्सर बयानों के लिए वाक्यविन्यास में नहीं दिखाया गया है !!

तो मेरे पास था: मैककर्स खोलें; और इसने मुझे त्रुटि 16 9 16 दी

लेकिन: मैकर्सर ने काम किया।

मैं किसी कारण के लिए @ आरएबी का जवाब देने में असमर्थ था इसलिए मुझे एक जवाब पोस्ट करना होगा:

मैं नहीं जानता कि SQL सर्वर रैब का कौन सा संस्करण उपयोग कर रहा था, लेकिन SQL सर्वर 2005 और 2008 में कर्सर के साथ अर्धविराम ठीक काम करता है।

मेरा क्या मतलब है यह जानने के लिए, निम्न प्रयास करें:

 DECLARE @tblSource TABLE ( CharCol VARCHAR(20) ); INSERT INTO @tblSource (CharCol) VALUES ('First'); INSERT INTO @tblSource (CharCol) VALUES ('Second'); DECLARE @text VARCHAR(20); DECLARE csr CURSOR LOCAL FAST_FORWARD FOR SELECT CharCol FROM @tblSource ORDER BY CharCol; OPEN csr; FETCH NEXT FROM csr INTO @text; WHILE @@FETCH_STATUS = 0 BEGIN; PRINT @text; FETCH NEXT FROM csr INTO @text; END; CLOSE csr; DEALLOCATE csr; 

जब एक बैच में अन्य बयान में एक अक्षम या सक्षम ट्रिगर स्टेटमेंट का उपयोग किया जाता है, तो एक अर्धविराम के साथ समाप्त होने के पहले ही कथन अन्यथा, आपको एक वाक्यविन्यास त्रुटि मिलेगी। मैंने इस एक के साथ मेरे बालों को फेंक दिया … और बाद में, मैंने इस एमएस कनेक्ट आइटम पर एक ही चीज़ के बारे में ठोकर खाई। इसे बंद नहीं किया जाएगा क्योंकि ठीक नहीं होगा।

यहाँ देखें

अर्धविराम हमेशा मिश्रित चयन बयानों में काम नहीं करते हैं।

तुच्छ मिश्रित चयन कथन के इन दो अलग-अलग संस्करणों की तुलना करें।

कोड

 DECLARE @Test varchar(35); SELECT @Test= (SELECT (SELECT (SELECT 'Semicolons do not always work fine.';););); SELECT @Test Test; 

रिटर्न

 Msg 102, Level 15, State 1, Line 5 Incorrect syntax near ';'. 

हालांकि, कोड

 DECLARE @Test varchar(35) SELECT @Test= (SELECT (SELECT (SELECT 'Semicolons do not always work fine.'))) SELECT @Test Test 

रिटर्न

 Test ----------------------------------- Semicolons do not always work fine. (1 row(s) affected) 

नोट: यह प्रश्न के लिखित रूप में उत्तर देता है, लेकिन जैसा कि कहा गया है समस्या नहीं है। इसे यहां जोड़ना, क्योंकि लोग इसके लिए खोज करेंगे

पुनरावर्ती सीटीई बयानों में से पहले भी अर्धविराम का उपयोग किया जाता है:

 ;WITH Numbers AS ( SELECT n = 1 UNION ALL SELECT n + 1 FROM Numbers WHERE n+1 <= 10 ) SELECT n FROM Numbers 

इस क्वेरी से सीटीई नामक संख्या उत्पन्न होगी जो कि पूर्णांक [1..10] के होते हैं इसे केवल 1 मान के साथ एक तालिका बनाकर किया जाता है, और फिर जब तक आप 10 तक नहीं पहुंचते तब तक पुनरावर्ती होते हैं।

यदि आपको SQLServer में यादृच्छिक कमांड टाइमआउट त्रुटियों को प्राप्त करना पसंद है, तो अपने कमांड टेक्स्ट स्ट्रिंग्स के अंत में अर्ध-कोलन छोड़ दें।

मुझे नहीं पता कि यह कहीं भी दस्तावेज है या यदि वह बग है, लेकिन ऐसा होता है और मैं कड़वा अनुभव से यह सीखा है।

SQL Server 2008 का उपयोग करते हुए मुझे सत्यापित और प्रतिलिपि प्रस्तुत करने योग्य उदाहरण हैं I

उर्फ -> व्यवहार में, हमेशा टर्मिनेटर को शामिल करें भले ही आप बस डेटाबेस में एक कथन भेज रहे हों