脚本在命令提示符下工作,但在使用SQLCMD的SQL作业中不起作用

时间:2017-08-18 20:36:55

标签: sql-server cmd sqlcmd sql-job

我有一个看起来像的脚本:

sqlcmd -S ServerName -d database -E -i "C:\Report1.sql"  -o E:\Folder\SubFolder\FileDate_%date:~-4%_%date:~4,2%.csv -s"," -w 700 

目的是自动运行.sql文件并将结果导出到.csv文件,文件名中包含Date。

如果我从命令提示符运行它,此脚本可以正常工作,但当我将其丢入SQL Server代理作业时,它会失败,并显示错误消息:

Sqlcmd: Error: Error occurred while opening or operating on file E:\Folder\SubFolder\FileDate_%date:~-4%_%date:~4,2%.csv (Reason: The filename, directory name, or volume label syntax is incorrect).  Process Exit Code 1.  The step failed.

两者都由管理员运行,我正在使用SSMS 2014.此外,作业是类型:操作系统(CmdExec)和运行方式:SQL Server代理服务帐户。

欢迎任何建议或替代方法。我的假设是sqlcmd在文件名

中的日期获取命令有问题

1 个答案:

答案 0 :(得分:0)

可能这是因为日期和时间根据与调用进程关联的语言设置产生不同的输出,所以为了确定发生了什么,你应该首先设置一个变量,然后使用它而不是试图直接编写文件名对于-o参数并在文件中打印其值。

即。 :

set foutname= "E:\Folder\SubFolder\FileDate_%date:~-4%_%date:~4,2%.csv"
@echo %foutname% > "E:\Folder\SubFolder\mychecklogfile.txt"

sqlcmd -S ServerName -d database -E -i "C:\Report1.sql"  -o "%foutname%" -s"," -w 700