SQL - 自动将结果保存为 CSV 或文本文件

SQL - Automatic results to CSV or Text File

我想知道是否有人可以提供帮助。

我在 SQL 中有很多查询(全部在单独的 *.sql 文件中)。我想知道是否有办法自动 运行 这些查询或批量 运行 将它们保存到 csv 或 txt 文件?

此外,我在这些查询中加入了变量,需要在查询 运行 之前每周修改一次。

谢谢。

KJ

您能否提供一些与变量相关的额外帮助?以前我会将变量声明和设置为:

声明@TW_FROM日期时间

声明@TW_TO日期时间

SET @TW_FROM = '2015-11-16 00:00:00'; SET @TW_TO = '2015-11-22 23:00:00';

如何使用 sqlcmd 执行此操作?

您可以编写一个使用 sqlcmd 的批处理文件:

MSDN sqlcmd

这将允许您循环调用脚本文件并将结果输出到文件。

将您当前的脚本转换为 Stored Procedure。 然后您可以将您的变量传递给它和 运行 查询。

如果您有 SQL 服务器代理可用(SQL 标准或更好),您可以使用它来自动执行 运行 存储过程。

否则可以使用 windows 中的任务计划程序实现相同的效果。

至于导出为 CSV this 会很有用。

是的,您可以使用 sqlcmd 来执行此操作。

首先-变量。您可以在 .sql 文件中使用 $(variablename) 引用您的变量,无论您想要替换变量。例如,

use $(dbname);
select $(columnname) from table1 where column= '$(var1)'

然后使用以下命令调用 sqlcmd(注意参数 -v 变量)

sqlcmd -S servername -d database -i "yoursqlfile.sql" -v dbname="database" columnname="column" var1="Fred"

为了将其输出到文件,您在末尾标记 > filename.txt

sqlcmd -S servername -d database -i "yoursqlfile.sql" -v dbname="database" columnname="column" var1="Fred" > filename.txt

如果要输出为csv,也可以使用参数-s指定分隔符(注意idfference大写S表示服务器)。所以现在我们有

sqlcmd -S servername -d database -s "," -i "yoursqlfile.sql" -v dbname="database" columnname="column" var1="Fred" > filename.csv

如果您想将多个命令输出到同一个 csv 或 txt 文件,请使用 >> 而不是 >,因为它会添加到文件底部,而不是替换它。

sqlcmd -S servername -d database -s "," -i "yoursqlfile.sql" -v dbname="database" columnname="column" var1="Fred" >> filename.csv

为了运行这几个脚本,你可以把语句放在一个批处理文件中,然后每周更改变量。

这取决于您的 SQL 服务器实际 运行 的位置。把任何东西写到你想要的位置可能会很棘手。

您可以阅读有关 BCP 的内容。

我的建议是:

从数据库中的所有查询创建一个 UDF(最好是内联 UDF!)。比从 EXCEL 或任何其他合适的产品调用它们。您可能想要设置一个 Excel,其中所有查询都会在每个 Sheet 上自动填写一个