Search code examples
sql-serversql-server-2005sqlcmd

How to tell if a variable (-v) is defined on command line (SQLCMD)


Is there a way to tell if a variable is defined on command line using SQLCMD?

Here is my command line:

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

Inside ProdToTest_DB.sql I would like to set some sort of conditional IF to check if the variable does not exists and define it if it does not.

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

I want to allow the script to be run both from command line and inside of SSMS.

Thanks in advance.


Solution

  • I've used variants of the following routine in numerous command-line-variable-dependant scripts. Here, "DataPath" is the required value.

    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