将变量从“列表”传递到.bat文件中的sqlcmd

时间:2019-05-10 06:37:29

标签: sql-server batch-file

这在批处理文件中有效:

sqlcmd -Q "exec sp_mysp @refdate = '2019-04-29'" -S myserver -d mydb -o C:\myfolder\result.csv

但是我希望批处理文件遍历日期列表,并将每个列表成员作为变量传递给-Q,而不是对日期进行硬编码,并且输出文件也应以日期开头。

我尝试过一个日期

set inputdate = '2019-04-29'
set "outputfile=C:\myfolder\%inputdate%_result.csv"
sqlcmd -Q "exec sp_mysp @refdate = try_cast(%inputdate% as date) " -S myserver -d mydb -o outputfile

但出现错误:Incorrect syntax near the keyword 'as'

在输入日期前后删除'%'会显示错误消息:Incorrect syntax near 'inputdate'

使用@inputdate会产生错误:Incorrect syntax near '@inputdate'

5 个答案:

答案 0 :(得分:1)

也许这会有所帮助:

IF exist inputfile.txt FOR /F "eol=# delims=" %%V IN (inputfile.txt) DO ( 
set "outputfile=C:\myfolder\%%V_result.csv"
sqlcmd -Q "exec sp_mysp @refdate = try_cast(%%V as date) " -S myserver -d mydb -o outputfile
)

此批处理命令从与.bat文件位于同一文件夹中的textfile.txt中遍历每个日期(每行一个日期),并为每个条目执行代码。

答案 1 :(得分:1)

我认为您可以尝试设置set inputdate='2019-04-29'之类的批处理变量。

答案 2 :(得分:1)

set用值设置变量时,需要考虑Windows cmd的解释方式

示例:

set variable = value

这将从variable的开头到value的结尾进行解释。因此,在上面的示例中,您现在有一个变量%variable %(注意尾随空格)和一个值value的值(请注意前导空白)。因此,如果您尝试echo %variable%,它将返回%variable%,因为从未设置过该变量,echo %variable %将返回一个值,但仍带有我们不希望的前导空格。

因此,变量和=之间不需要有空格,=和值之间也不需要空格。另外,最好将整个变量字符串用双引号引起来,以确保值上没有尾随空格,因此,最后,您需要执行以下操作:

 set "inputdate='2019-04-29'"

答案 3 :(得分:0)

我想这就是你想要的:

set inputdate = '2019-04-29'
set "outputfile=C:\myfolder\%inputdate%_result.csv"
sqlcmd -Q "exec sp_mysp @refdate = try_cast($(inputdate) as date) " -S myserver -d mydb -o outputfile

我在这样的批处理文件中确认:

set inputdate='2019-04-29'
sqlcmd -Q "print $(inputdate)" -S myserver -E

答案 4 :(得分:0)

您可能会缺少用双引号引起来的日期。 相当于Powershell的是:

# Dates
$dates = @(
    '2019-04-29'
)

$dates  | ForEach-Object {
    # Date
    $inputdate = $_
    # Command to run
    $cmd = "DECLARE @refdate as datetime; set @refdate = try_cast ('$inputdate' as date) ; exec sp_mysp @refdate " 

    $args = @( 
        '-Q'
        $cmd    
        '-S'
        'myserver'
        '-d'
        'mydb'
        '-o' 
        'outputfile'
    )
    Write-Host "Running : $cmd "
    & 'sqlcmd' $args
}
相关问题