sha*_*odh 5 sql-server batch-file
这在批处理文件中有效:
sqlcmd -Q "exec sp_mysp @refdate = '2019-04-29'" -S myserver -d mydb -o C:\myfolder\result.csv
Run Code Online (Sandbox Code Playgroud)
但我希望批处理文件循环遍历日期列表,并将每个列表成员作为变量传递给 -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
Run Code Online (Sandbox Code Playgroud)
但出现错误:Incorrect syntax near the keyword 'as'
删除 inputdate 周围的 '%' 会出现错误消息:Incorrect syntax near 'inputdate'
使用 @inputdate 会出现错误:Incorrect syntax near '@inputdate'
当set给变量赋值时,你需要考虑Windows如何解释它cmd
例子:
set variable = value
Run Code Online (Sandbox Code Playgroud)
这将从开始variable到结束进行解释value因此给出上面的示例,您现在有一个变量%variable %(注意尾随空格)和一个值value(注意前导空格)。因此,如果您尝试这样做,echo %variable%它将返回%variable%,因为变量从未设置,其中echo %variable %将返回一个值,但仍然带有我们不想要的前导空格。
因此,变量和值之间不能有空格,并且值=之间不能有空格。=此外,最好将整个变量字符串用双引号引起来,以确保值上没有尾随空格,因此最后,您需要执行以下操作:
set "inputdate='2019-04-29'"
Run Code Online (Sandbox Code Playgroud)