【问题标题】:Run several scripts in sequence and output each one to a csv file依次运行多个脚本并将每个脚本输出到 csv 文件
【发布时间】:2018-07-31 09:52:50
【问题描述】:

我有几个查询需要在Microsoft SQL Server Management Studio 中每周运行一次,每一个只是一个比较简单的选择查询,结果需要保存到csv 文件中。现在有人花一个小时轮流运行每个脚本并保存结果。

我认为这可能有点自动化,但我很挣扎。

通过阅读此处的先前问题,我已经了解了使用 SQLCMD 模式,并通过输入 :output c:\filename.csv 我将输出保存到一个文件中,但是我无法生成单独的文件每个查询。

为简单起见,假设我的查询如下所示:

OUT: C:\File1.csv
SELECT * FROM table1;

OUT: C:\File2.csv
SELECT * FROM table2;

OUT: C:\File3.csv
SELECT * FROM table3;

我最终得到的不是每个查询的输出都包含三个文件,而是 File1 和 File2 填充了几个不可读的字符,并且所有三个查询都在 File3 中。我知道在 Oracle 中有一个 spool off 命令,对于 OUT:在 SSMS 中是否有类似的东西?

【问题讨论】:

  • 我仍然想知道这是否可以在脚本本身内完成,但我采取了以下措施作为权宜之计:for %%G in (*.sql) do sqlcmd /S [server] -U [username] -P "[password] -o "%%G.csv" -s"," -w 700 -i "%%G"pausefor %%A in (*.sql.csv) do for %%B in ("%%~nA") do ren "%%A" "%%~nB.csv"

标签: sql ssms export-to-csv sqlcmd


【解决方案1】:

我运行了一个稍加修改的查询,并且能够获得三个具有三个不同查询结果的文件。我运行以下命令进行快速测试:

:OUT C:\File1.csv
SELECT 'Hello'

GO

:OUT C:\File2.csv
SELECT 'My'

GO

:OUT C:\File3.csv
SELECT 'Friend'

这给了我三个单独的文件,每个查询的结果都在一个单独的文件中。我所做的只是取出分号并添加关键字 GO,它将终止命令并继续执行下一个命令。我希望这会有所帮助。

【讨论】:

  • 啊,这正是我所需要的,我尝试谷歌搜索各种不同的术语,但不知何故从未遇到任何说 GO 基本上结束并开始一个新脚本的东西。所以我认为 SQLCMD 可能稍微更强大和有用,但这对于临时使用肯定仍然有用,干杯!
  • 很高兴来到这里!编码愉快。
猜你喜欢
  • 2019-02-04
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-26
  • 1970-01-01
  • 2017-06-23
相关资源
最近更新 更多