TSQL – 将查询导出到xls / xslx / csv

我在TSQL中有一个复杂的dynamic查询,我想要导出到Excel。 [结果表格包含长度超过255个字符的字段,如果它很重要]

我知道我可以使用Management Studio菜单导出结果,但我想通过代码自动执行。 你知不知道怎么?

提前致谢。

你可以看看sp_send_dbmail 。 这使您可以在运行后从查询中发送电子邮件,其中包含结果集的附加CSV。 显然这种方法的可行性取决于结果集的大小。

来自链接文档的示例:

EXEC msdb.dbo.sp_send_dbmail @profile_name = 'AdventureWorks2008R2 Administrator', @recipients = 'danw@Adventure-Works.com', @query = 'SELECT COUNT(*) FROM AdventureWorks2008R2.Production.WorkOrder WHERE DueDate > ''2006-04-30'' AND DATEDIFF(dd, ''2006-04-30'', DueDate) < 2' , @subject = 'Work Order Count', @attach_query_result_as_file = 1 ; 

一种方法是使用bcp,您可以从命令行调用 – 查看该引用中的示例,并特别查看可用于设置字段终止符(对于CSV)的-t参数的信息。 在指定字段和行终止符上有这个链接的引用。

或者,直接使用TSQL,你可以使用OPENROWSET, 如Pinal Dave在这里解释的那样 。

更新:回复:2008 64位&OPENROWSET – 我没有意识到这一点,快速挖掘抛出了这个MSDN论坛上给出的链接。 任何帮助?

除此之外,其他选项包括编写SSIS包或使用SQL CLR在.NET中编写导出过程以直接从SQL进行调用。 或者,您可以通过xp_cmdshell从TSQL调用bcp – 您必须启用它才能打开SQL Server可能的“攻击面”。 我build议查看这个讨论 。

这里有一些方法: SQL Server Excel Workbench

我需要接受一个dynamic查询并将结果保存到磁盘,以便我可以通过Web应用程序下载。

插入到数据源中并没有为我工作,因为它继续努力工作。

最后,我把查询从SSMS发送到PowerShell阅读我的post在这里如何创build一个文件在服务器上运行一个现有的storedprocedure或该过程的SQL语句在R2008 sql服务器

然而,单引号是一个问题,起初我没有修剪我的查询,并写在一行,所以它在sql studio中的换行符实际上很重要。