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

时间:2015-09-24 11:24:34

标签: sql sql-server-2008 export-to-csv sqlcmd sql-job

经过一番研究后,我找到了将sqlcmd命令的输出附加到csv文件的解决方案。使用命令外壳时一切正常:

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 Server作业代理(使用与控制台相同的帐户)来安排这些内容,因此我添加了一个作业(类型为CmdExec)。作业执行失败,出现以下错误(意外参数):

  

Meldung   Ausgeführtalsalut Benutzer:''[ACCOUNT]''。 Sqlcmd:'&gt;&gt;''[FULL_PATH_TO_CSV-FILE]'':Unerwartetes Argument。 Geben Sie' - ?'嗯,嗯死了Hilfe anzuzeigen。 Prozessexitcode 1. Fehler bei Schritt。

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

问题是:为什么“&gt;&gt;”命令在SQL Server代理作业中不起作用?

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

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

提前非常感谢你!

祝你好运, D.C。

1 个答案:

答案 0 :(得分:1)

我认为这里的问题是SQL Server代理创建进程“sqlcmd”并将整行作为参数发送给它。所以“sqlcmd”不知道这意味着什么 - “&gt;&gt; ...”并返回错误。

要使用此(“&gt;&gt;”)命令Shell语法,您应该在SQL代理中调用它。所以试试:

  

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