2010-10-12 9 views
8

C'è un modo per dire se una variabile è definita sulla riga di comando usando SQLCMD?Come stabilire se una variabile (-v) è definita sulla riga di comando (SQLCMD)

Qui è la mia linea di comando:

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

All'interno ProdToTest_DB.sql vorrei impostare una sorta di condizionale IF per verificare se la variabile non esiste e definirla se non lo fa.

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

voglio permettere lo script per essere eseguito sia da linea di comando e dentro di SSMS.

Grazie in anticipo.

risposta

12

Ho utilizzato varianti della seguente routine in numerosi script dipendenti dalla riga di comando. Qui, "DataPath" è il valore richiesto.

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

Questa è la cosa peggiore che abbia mai visto. Non la soluzione, bada bene, ma il bisogno per questo. – FLGMwt

+1

Oh, ce n'è di peggio di così, e peggio. –

+0

Questa non è la risposta alla domanda. Questo controlla solo se stai attualmente eseguendo lo script in modalità SQLCMD. – kjbartel

0

È possibile ottenere ciò che si desidera con una dichiarazione di prova. Basta accedere a una delle variabili nel tentativo, se questo genera un errore, definirli nel catch.

+0

SQL TRY ... CATCH non cattura gli errori SQLCMD. Il processore SQLCMD funziona prima dell'esecuzione delle istruzioni SQL, quindi l'errore si verifica comunque, prima che TRY ... CATCH sia stato eseguito. – DaveBoltman

Problemi correlati