2010-10-12 5 views
8

Czy istnieje sposób określenia, czy zmienna jest zdefiniowana w wierszu polecenia przy użyciu SQLCMD?Jak określić, czy zmienna (-v) jest zdefiniowana w wierszu poleceń (SQLCMD)?

Oto moja linia poleceń:

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

Wewnątrz ProdToTest_DB.sql Chciałbym ustawić jakąś warunkowa IF, aby sprawdzić, czy zmienna nie istnieje i zdefiniować go czy nie.

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

Chcę zezwolić na uruchomienie skryptu zarówno z linii poleceń, jak i wewnątrz SSMS.

Z góry dziękuję.

Odpowiedz

12

Użyłem wariantów poniższej procedury w wielu skryptach zależnych od wiersza poleceń. W tym przypadku "DataPath" jest wymaganą wartością.

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

To najgorsza rzecz, jaką kiedykolwiek widziałem. Nie rozwiązanie, pamiętaj, ale potrzeba. – FLGMwt

+1

O, jest dużo tak źle, jak tam, i gorzej. –

+0

To nie jest odpowiedź na pytanie. Sprawdza się tylko, czy skrypt jest aktualnie uruchomiony w trybie SQLCMD. – kjbartel

0

Możesz dokonać tego, czego chcesz, używając instrukcji catch. Wystarczy uzyskać dostęp do jednej ze zmiennych w próbie, jeśli spowoduje to błąd, zdefiniuj je w haczyku.

+0

SQL TRY ... ŁĄCZE nie przechwytuje błędów SQLCMD. Procesor SQLCMD działa przed wykonaniem instrukcji SQL, więc i tak wystąpi błąd przed wykonaniem polecenia TRY ... CATCH. – DaveBoltman

Powiązane problemy