2015-09-24 9 views
5

मेरे पास कई बैचों के साथ एक बड़ी SQL स्क्रिप्ट है (GO का उपयोग करके)।एसक्यूएल स्क्रिप्ट का निष्पादन रोकें

कुछ स्थितियों पर, मैं इस स्क्रिप्ट के पूरे निष्पादन को रोकना चाहता हूं।

मैंने NOEXEC का उपयोग करने का प्रयास किया, लेकिन मुझे अमान्य ऑब्जेक्ट त्रुटियां मिल रही हैं, क्योंकि मेरी स्क्रिप्ट में नई टेबल और कॉलम में डेटा बनाना और जोड़ना शामिल है।

मैं RAISERROR का उपयोग नहीं करना चाहता, क्या ऐसा करने का कोई और तरीका है?

+0

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

+0

आप इस स्क्रिप्ट को कैसे निष्पादित कर रहे हैं? प्रबंधन स्टूडियो? SQLCMD? आवेदन? –

+0

मैं इसे प्रबंधन स्टूडियो में निष्पादित कर रहा हूं –

उत्तर

4

इस समस्या का कोई अच्छा समाधान नहीं है। बैच के बीच डेटा साझा करने का एक तरीका टेबल (लगातार या अस्थायी) है। तो अगर आप कुछ तर्क है कि इस तरह है कि तालिका में उस तालिका या विशेष कॉलम के मूल्य के कुछ राज्य पर निर्भर करता है हो सकता है:

--CREATE TABLE debug(col int) 
--INSERT INTO debug VALUES(1) 
--DELETE FROM debug 


SELECT 1 
GO 

SELECT 2 

SELECT 3 

GO 

IF EXISTS(SELECT * FROM debug) 
    SELECT 6 

GO 

बस है कि आप छोड़ सकते हैं और के आधार पर करना चाहते हैं स्क्रिप्ट में हर जगह पर IF EXISTS(SELECT * FROM debug) इस लाइन को जोड़ने तथ्य यह है कि तालिका में कुछ पंक्तियां हैं या नहीं, वे कोड ब्लॉक निष्पादित होंगे या नहीं।

+0

एक अच्छा समाधान की तरह लगता है, लेकिन यह मेरी स्थिति में समझ में नहीं आता है क्योंकि मेरे पास एक बड़ी स्क्रिप्ट है और यह प्रत्येक बैच से पहले चेक जोड़ने की सलाह नहीं दी जाती है। –

+3

@RandomUser, आपके पास अभी कोई विकल्प नहीं है। –

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