我在TSQL中有一个复杂的动态查询,我想导出到Excel。 [结果表包含文本超过255个字符的字段,如果重要的话]
我知道我可以使用Management Studio菜单导出结果,但我想通过代码自动执行。你知道吗?
提前致谢。
答案 0 :(得分:2)
您可以查看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 ;
答案 1 :(得分:1)
一种方法是使用可以从命令行调用的bcp - 查看该引用中的示例,特别是查看-t参数的信息,您可以使用它来设置字段终止符(对于CSV) 。 Specifying Field and Row Terminators上有这个链接参考。
或者,直接使用TSQL,您可以使用OPENROWSET as explained here by Pinal Dave。
<强>更新强> Re;:2008 64Bit&amp; OPENROWSET - 我没有意识到这一点,快速挖掘引发了this on MSDN forums给出的链接。有帮助吗?
除此之外,其他选项包括编写SSIS包或使用SQL CLR在.NET中编写导出过程以直接从SQL调用。或者,您可以通过xp_cmdshell从TSQL调用bcp - 您必须启用它,这将打开SQL Server可能的“攻击面”。我建议您查看this discussion。
答案 2 :(得分:1)
这里有一些方法:SQL Server Excel Workbench
答案 3 :(得分:0)
我需要接受动态查询并将结果保存到磁盘,以便我可以通过Web应用程序下载。
插入数据源对我来说没有用,因为我们不断努力让它发挥作用。
最终我将查询从SSMS发送到PowerShell 在这里阅读我的帖子 How do I create a document on the server by running an existing storedprocedure or the sql statement of that procedure on a R2008 sql server
然而单引号是一个问题,起初我没有修剪我的查询并将其写在一行上,所以它在sql studio中有换行符,这实际上很重要。