使用 Job Agent 将 sqlcmd 的输出附加到文件

Append output of sqlcmd to file using Job Agent

经过一番研究,我找到了将 sqlcmd 命令的输出附加到 csv 文件的解决方案。使用命令 Shell:

时一切正常
C:\temp>sqlcmd -S <SERVER> -d <DATABASE> -E -Q "SELECT [something] FROM [TableX] WHERE [columnY] IS NOT NULL;" -W -h-1 -s";" >>"<FULL_PATH_TO_CSV-FILE>"

我想使用 SQL 服务器作业代理(使用与控制台相同的帐户)来安排这些东西,所以我添加了一个作业(类型 CmdExec)。作业执行失败并出现以下错误(意外参数):

Meldung Ausgeführt als Benutzer: ''[ACCOUNT]''. Sqlcmd: '>>''[FULL_PATH_TO_CSV-FILE]'': Unerwartetes Argument. Geben Sie '-?' ein, um die Hilfe anzuzeigen. Prozessexitcode 1. Fehler bei Schritt.

我的解决方法工作正常:删除 >>"<FULL_PATH_TO_CSV-FILE>" 并使用该步骤的输出文件。但是:我想将输出文件用于记录目的 - 而不是用于数据输出...

问题是:为什么“>>”命令在 SQL 服务器代理作业中不起作用?

我不想简单地重定向输出。我知道 sqlcmd 为此提供了参数 -o 。在这种情况下,现有文件将被覆盖。这不是我想要的。

不幸的是,到目前为止,我还没有 post 截图的声誉。

非常感谢您!

此致, D.C.

我认为这里的问题是 SQL 服务器代理创建进程 "sqlcmd" 并将整行作为参数发送给它。所以 "sqlcmd" 不知道这是什么意思 - ">>..." 和 returns 有错误。

要使用此 (">>") 命令 Shell 语法,您应该在 SQL 代理中调用它。所以尝试:

cmd.exe /c "sqlcmd -S -d -E -Q "SELECT [something] FROM [TableX] WHERE [columnY] IS NOT NULL;" -W -h-1 -s";" >>"""