【问题标题】:Append output of sqlcmd to file using Job Agent使用 Job Agent 将 sqlcmd 的输出附加到文件
【发布时间】:2015-12-21 23:35:33
【问题描述】:

经过一番研究,我找到了将 sqlcmd 命令的输出附加到 csv 文件的解决方案。使用 Command 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 Server 作业代理(使用与控制台相同的帐户)来安排这些东西,所以我添加了一个作业(类型 CmdExec)。作业执行失败并出现以下错误(意外参数):

融通 Ausgeführt als Benutzer:''[帐户]''。 Sqlcmd: '>>''[FULL_PATH_TO_CSV-FILE]'': Unerwartetes 参数。格本西'-? ein, um die Hilfe anzuzeigen。 Prozessexitcode 1. Fehler bei Schritt。

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

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

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

很遗憾,到目前为止我还没有发布截图的声誉。

非常感谢您!

最好的问候, 哥伦比亚特区

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 这解决了!非常感谢!不幸的是有一个新问题:没有特殊字符(虽然我添加了 -f 65001):-(
    猜你喜欢
    • 1970-01-01
    • 2017-03-20
    • 2011-11-15
    • 2016-06-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2013-11-06
    相关资源
    最近更新 更多