SQL - 自动结果到CSV或文本文件

时间:2015-11-26 13:58:26

标签: sql-server csv sqlcmd invoke-sqlcmd

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

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

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

感谢。

KJ

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

DECLARE @TW_FROM DATETIME

DECLARE @TW_TO DATETIME

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

如何使用sqlcmd执行此操作?

4 个答案:

答案 0 :(得分:2)

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

首先 - 变量。您可以使用$(document).ready(function () { $('#setpolicyform').bootstrapValidator({ message: 'This value is not valid' feedbackIcons: { valid: 'glyphicon glyphicon-ok', invalid: 'glyphicon glyphicon-remove', validating: 'glyphicon glyphicon-refresh' }, fields: { policyta: { group: '.lnbrd', validators: { notEmpty: { message: 'Textarea cannot be empty' }, stringLength: { max: 50, message: 'Maximum 50 Characters Required' } } } } }); $('.textarea').wysihtml5({ events: { load: function () { $('.textarea').addClass('textnothide'); }, change: function () { $('#setpolicyform').bootstrapValidator('revalidateField', 'policyta'); } } }); }); 在.sql文件中引用变量,无论您想要替换变量。例如,

 while ((read = getline(&line, &len, stream)) != -1) 
 {
     printf("Retrieved line of length %zu :\n", read);
     printf("%s", line);
 }

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

$(variablename)

要将此输出到文件,请标记>最后的filename.txt

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

如果要输出到csv,还可以使用参数-s指定分隔符(请注意带有服务器大写字母S的idfference)。所以我们现在有了

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

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

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

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

答案 1 :(得分:1)

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

MSDN sqlcmd

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

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:1)

这取决于您的SQL Server在哪里运行。将任何内容写入所需位置可能会非常棘手。

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

我的建议是:

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