SQL स्क्रिप्ट में त्रुटि: प्रति बैच केवल एक कथन की अनुमति है


128

मेरे पास 4 sql स्क्रिप्ट हैं जिन्हें मैं PostDep तैनाती में DACPAC में चलाना चाहता हूं, लेकिन जब मैं उनमें से 3 के लिए VS प्रोजेक्ट बनाने की कोशिश करता हूं तो मुझे यह त्रुटि मिलती है:

Only one statement is allowed per batch. A batch separator, such as 'GO', might be required between statements.

स्क्रिप्ट में INSERTडीबी पर विभिन्न तालिकाओं में केवल कथन होते हैं । और उन सभी को इस तरह संरचित किया जाता है

IF NOT EXISTS (SELECT 1 FROM dbo.Criteria WHERE Name = 'Mileage') INSERT INTO dbo.Criteria(Name) VALUES ('Mileage');

केवल अलग-अलग टेबल पर और अलग-अलग डेटा के साथ।

मेरा प्रश्न है कि वीएस को उनमें से 3 के बारे में शिकायत क्यों है जब सभी लिपियाँ वाक्यविन्यास और संचालन के संदर्भ में समान हैं?

पुनश्च: बयानों के बीच 'GO' को जोड़ने से पता चलता है कि त्रुटि कुछ भी नहीं करती है।

जवाबों:


319

मुझे समस्या मिल गई है। जब मैंने वीएस में फ़ाइल को जोड़ा तो मैं Build Action = Noneफ़ाइल गुणों से सेट करना भूल गया । इसलिए यह बदलना कि समस्या और परियोजना अब तय हो गई है।


26
शानदार कैच। वाह, Microsoft, गंभीरता से ?? वह त्रुटि या उसका संदेश किसी भी तरह से, आकार या रूप में सहज कैसे है?
माइक के

9
इस उत्तर की सराहना करें, सिवाय इसके कि मैं "भूल" के आपके उपयोग से भ्रमित हूं - दुनिया में कैसे पता चलेगा कि पहली जगह में यह आवश्यक है?
पेटीएम

2
क्योंकि मैंने थोड़ी देर पहले इसी तरह की स्क्रिप्ट की है और किसी ने मुझे बिल्ड एक्शन के बारे में कुछ भी नहीं बताया :)
कॉस्मिन आयनस्कु

इसने मेरा मुद्दा तय कर दिया है। थम्स अप!
नृत्य 2

3
महान ! मेरा दिन बचाया। और इस तरह के भ्रामक संदेश के लिए MSBuild पर शर्म की बात है
Dio Phung

8

भले ही यह बहुत पुराना लगता है मैं कुछ घंटों के लिए उसी के साथ फंस गया और मुझे लगता है कि यह तरीका कई लोगों के लिए मददगार हो सकता है।

में Database project, के रूप Buildमें सेट फ़ाइलें डेटाबेस संरचना के रूप में माना जाता है ताकि डिजाइन द्वारा ऐसी फाइल में सिर्फ एक बयान की अनुमति हो। Goन ही कोई अन्य बैच टर्मिनेटर उस व्यवहार को बदलेगा, यह संदेश सिर्फ गलती है। अधिक जानकारी यहाँ।

ऐसी परियोजना में फ़ाइलों के लिए अन्य बिल्ड विकल्प बहुत है। आपके मामले के लिए ऐसा लगता है PostDeploy। इस तरह की फाइल में आपके पास विभिन्न कमांड जैसे insertsआदि हो सकते हैं ।

फिर आप डेटा-टियर DB अनुप्रयोगों के लिए डेटाबेस प्रोजेक्ट के dacpac फ़ाइल के रूप में आउटपुट का उपयोग कर सकते हैं (अन्यथा यह शामिल नहीं है)।


-3

प्रत्येक कथन के अंतिम में से (अर्ध-उपनिवेश) निकालें और मुझे यकीन नहीं है लेकिन ऊपर दिए गए कथनों के बीच GO की आवश्यकता नहीं है।


हो गया। कुछ भी नहीं करता है। मुझे पता है कि GO की आवश्यकता नहीं है, लेकिन मैंने इसे आज़माया क्योंकि मैंने इस पर 2 घंटे से अधिक समय बर्बाद किया है।
कॉस्मिन आयनस्कु

4
प्रत्येक कथन के बाद एक अर्ध-उपनिवेश शामिल करना मानक वाक्यविन्यास है और इसे वर्षों से वकालत किया गया है। कई ऐसी चीजें हैं जो अर्ध-कोलों के लापता होने के कारण गलत हो गईं। एक डेवलपर को सलाह देना एक अर्ध-उपनिवेश को शामिल नहीं करना है जहां एक अर्ध-बृहदान्त्र सबसे अच्छा अभ्यास है संदिग्ध है।
ब्रैंडन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.