1

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

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

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

谢谢。

凯杰

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

声明@TW_FROM DATETIME

声明@TW_TO DATETIME

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

如何使用 sqlcmd 执行此操作?

4

4 回答 4

2

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

首先 - 变量。您可以使用$(variablename)要替换变量的任何位置来引用 .sql 文件中的变量。例如,

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 指定分隔符(注意服务器的大写 S 的 idfference)。所以现在我们有

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

要为多个脚本运行此程序,您可以将语句放在一个批处理文件中,然后每周更改变量。

于 2015-11-26T14:33:09.593 回答
1

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

MSDN sqlcmd

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

于 2015-11-26T14:23:15.263 回答
1

将您当前的脚本转换为存储过程。然后,您可以将变量传递给它并运行查询。

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

否则,同样可以使用 Windows 中的任务计划程序来实现。

至于导出到 CSV,将很有用。

于 2015-11-26T14:31:06.617 回答
1

这取决于您的 SQL Server 实际运行的位置。将任何内容写入您想要的位置可能会非常棘手。

您可以阅读有关 BCP 的信息。

我的建议是:

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

于 2015-11-26T14:37:00.373 回答