SQL - 将结果自动转换为CSV或文本文件

问题描述:

我想知道是否有人可以提供帮助。SQL - 将结果自动转换为CSV或文本文件

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

另外,我在这些查询中发现了变量,这些查询需要在查询运行之前每周进行修改。

谢谢。

KJ

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

DECLARE @TW_FROM DATETIME

DECLARE @TW_TO DATETIME

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

如何使用sqlcmd执行此操作?

+0

从SQL代理作业运行的SQL Server Integration Services将执行此操作。 –

+0

嗨Kajan,我只是看看你的个人资料。你已经提出了3个问题,但没有接受任何问题。请在这里查看一下:[someone-answers](http://*.com/help/someone-answers)。问题是,没有被接受的问题永远存在。 Thx – Shnugo

是的,你可以使用sqlcmd来做到这一点。

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

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

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

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

调用SQLCMD为了其输出到一个文件,你标记> 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 

要为几个脚本运行它,你可以把一个批处理文件语句,然后每个星期换一次的变量。

+0

这是完美的@BeanFrog !!!非常感谢。 – Kajan

你可以写一个使用SQLCMD一个批处理文件:

MSDN sqlcmd

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

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

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

否则,使用Windows中的任务计划程序也可以实现相同的功能。

至于导出为CSV this将是有用的。

这取决于你的SQL Server在哪里运行。写任何东西到你想要的位置可能是相当棘手的。

你可以阅读关于BCP。

我的建议是:

创建UDF(最好是内联UDF!)从您的查询的数据库内。请从EXCEL或任何其他配件产品拨打电话。您可能想要设置一个Excel,其中每张工作表上自动填充所有查询