【发布时间】:2023-03-19 21:26:01
【问题描述】:
我有一个看起来像这样的脚本:
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 文件。
如果我从命令提示符运行此脚本,它可以正常工作,但是当我将它放入 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 文件名中的日期获取命令有问题
【问题讨论】:
-
将 SQL 代理尝试对文件执行的命令回显。这会告诉你在构建命令行时是否有错误。
-
不看环境就很难判断。一个想法:如果
E:是网络共享,而SQL Server代理服务账号不是域用户,而你在域中,则不能以本地用户访问域资源。 -
sql server 实例需要访问“E:\Folder\SubFolder\”。
-
“两者都由管理员运行并且我使用的是 SSMS 2014”是什么意思?除非您指定代理,否则作业始终使用 SQL Server 代理服务帐户的权限运行。
-
@XingzhouLiu 我的意思是 SQL Server 代理服务帐户是管理员,我以管理员身份在命令提示符中测试了脚本
标签: sql-server cmd sqlcmd sql-job