【问题标题】:Windows task scheduler to run SQL query and save outputWindows 任务调度程序运行 SQL 查询并保存输出
【发布时间】:2014-12-18 14:19:59
【问题描述】:

我有一个工作但相对冗长的 SQL 脚本,我想每晚运行它并将结果保存在 csv 文件中。我的首选方法 SQL Server 作业调度程序似乎无法将查询结果保存到文件中。我还尝试使用 Windows 任务调度程序和以下 bcp 命令调度任务:

bcp "MY QUERY HERE" queryout C:\path\to\Desktop\RTFS.txt -c -d servername -U uname -P password

bcp 上的连接超时。我知道 SQL Server 正在接受远程连接,因为我可以从网络上的 Linux 服务器连接到它,并在 Python 中完成我想要的一切。遗憾的是,尽管有人告诉我这必须是一个仅限 Windows 的解决方案,所以我不能使用有效的 Python/Linux 实现。

有没有办法将输出保存为来自 SQL Server 作业的文件或使用任务计划完成相同的结果?

【问题讨论】:

  • 我怀疑你的意思是 SQL Server 代理。代理不会将任何内容保存到文件中,而是您执行的命令导出数据。如果没有文件,则命令失败。您应该配置您的作业和bcp 调用以记录任何错误。
  • 顺便说一句,您确定您获得了连接,而不是命令 tiemout?连接超时通常意味着您使用了错误的服务器名称。代理服务通常与数据库在同一台机器上运行,因此网络问题是不可能的。防火墙问题也是如此——你会立即被拒绝。如果您收到命令超时,那是因为作业耗时过长
  • @TabAlleman 不,不幸的是。
  • @TabAlleman SSIS 批量导出任务本质上是 bcp,具有图形界面,可防止您弄乱参数。如果有效,bcp 也应该有效
  • 您可以使用导入/导出向导。最后,您可以选择将任务保存为 DTS 文件(即,以前称为 SSIS 的文件),然后您可以通过 SQL 代理调用该文件。

标签: sql-server scheduled-tasks bcp


【解决方案1】:

也许您可以将osql.exe 与选项-Q“您的查询”和-o“输出文件”一起使用。我认为 osql 是作为 ms sql server [express] 的一部分安装的 ...

【讨论】:

    【解决方案2】:

    我的解决方案可能不是唯一或最好的解决方案,最终是编写一个 C# 控制台应用程序来执行我想要的操作,然后从 Windows 任务计划程序运行它。

    【讨论】:

      【解决方案3】:

      我认为您的命令行中的一个参数不正确。 您想要的参数是 [-S 服务器名称] [-d 数据库名称] [-U 用户名] [-P 密码]

      bcp 用法

      usage: bcp {dbtable | query} {in | out | queryout | format} datafile
        [-m maxerrors]            [-f formatfile]          [-e errfile]
        [-F firstrow]             [-L lastrow]             [-b batchsize]
        [-n native type]          [-c character type]      [-w wide character type]
        [-N keep non-text native] [-V file format version] [-q quoted identifier]
        [-C code page specifier]  [-t field terminator]    [-r row terminator]
        [-i inputfile]            [-o outfile]             [-a packetsize]
        [-S server name]          [-U username]            [-P password]
        [-T trusted connection]   [-v version]             [-R regional enable]
        [-k keep null values]     [-E keep identity values]
        [-h "load hints"]         [-x generate xml format file]
        [-d database name]        [-K application intent]
      

      您缺少 -S 标签。 您在数据库标签上指定服务器 另外,使用 -c 我想你应该指定你想要的字符类型......只需删除 -c 并检查默认值是否适合你。 您可以尝试以下方法吗?

      bcp "MY QUERY HERE" queryout C:\path\to\Desktop\RTFS.txt -S servername -d database -U uname -P password
      

      【讨论】:

        猜你喜欢
        • 2014-06-06
        • 2016-10-02
        • 2021-11-20
        • 2018-04-16
        • 2021-07-20
        • 2017-11-22
        • 1970-01-01
        • 2016-03-19
        • 2012-04-21
        相关资源
        最近更新 更多