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 的批处理文件:
这将允许您循环调用脚本文件并将结果输出到文件。
将您当前的脚本转换为 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 上自动填写一个
我想知道是否有人可以提供帮助。
我在 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 的批处理文件:
这将允许您循环调用脚本文件并将结果输出到文件。
将您当前的脚本转换为 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 上自动填写一个