2010-10-12 9 views
8

पर एक चर (-v) परिभाषित किया गया है या नहीं, यह बताने का कोई तरीका है कि SQLCMD का उपयोग करके कमांड लाइन पर एक चर परिभाषित किया गया है या नहीं?कमांड लाइन (SQLCMD)

 
sqlcmd -vDB="EduC_E100" -i"Z:\SQL Common\Admin\ProdToTest_DB.sql" 

अंदर ProdToTest_DB.sql मैं अगर चर मौजूद नहीं है, तो जाँच करें और इसे परिभाषित करता है, तो यह नहीं है करने के लिए सशर्त किसी प्रकार सेट करना चाहते हैं:

यहाँ मेरी कमांड लाइन है।

 
IF NOT $(DB) 
:setvar DB "C_Q200" 
END 

मैं स्क्रिप्ट को कमांड लाइन और एसएसएमएस के अंदर चलाने की अनुमति देना चाहता हूं।

अग्रिम धन्यवाद।

उत्तर

12

मैंने कई कमांड-लाइन-वेरिएबल-निर्भर स्क्रिप्ट में निम्नलिखित रूटीन के रूपों का उपयोग किया है। यहां, "डेटापाथ" आवश्यक मान है।

DECLARE @Test_SQLCMD varchar(100) 

-- Confirm that SQLCMD values have been set (assume that if 1 is, all are) 
SET @Test_SQLCMD = '$(DataPath)' 

IF reverse(@Test_SQLCMD) = ')htaPataD($' 
    -- SQLCMD variables have not been set, crash and burn! 
    RAISERROR('This script must be called with the required SQLCMD variables!', 20, 1) with log 
+3

यह सबसे बुरी बात है जिसे मैंने कभी देखा है। समाधान नहीं, आपको दिमाग है, लेकिन इसकी आवश्यकता है। – FLGMwt

+1

ओह, वहां बहुत से बुरे हैं, और इससे भी बदतर। –

+0

यह प्रश्न का उत्तर नहीं है। यह केवल तभी जांचता है जब आप वर्तमान में SQLCMD मोड में स्क्रिप्ट चला रहे हैं। – kjbartel

0

आप जो प्रयास करना चाहते हैं उसे पूरा कर सकते हैं। कोशिश में अपने चरों में से किसी एक को एक्सेस करें, अगर यह कोई त्रुटि उत्पन्न करता है, तो उन्हें पकड़ में परिभाषित करें।

+0

SQL TRY निष्पादित नहीं करता है ... कैच SQLCMD त्रुटियों को नहीं पकड़ता है। एसक्यूएलसीएमडी प्रोसेसर SQL कथन निष्पादित होने से पहले काम करता है, इसलिए त्रुटि से पहले त्रुटि होती है ... कैच ने निष्पादित किया है। – DaveBoltman