是否可以将MS SQL结果传输到新的MS Excel文件?

是否可以将MS SQL结果传输到新的MS Excel文件?,sql,sql-server,excel,sql-server-2008,ssis,Sql,Sql Server,Excel,Sql Server 2008,Ssis,我正在使用下面的查询将SQL结果传输到现有的Excel文件。是否可以将它们转移到新的excel工作表中?使用SSIS我们可以做到这一点,但我想知道是否有任何可能在SSMS中做到这一点 SP_CONFIGURE 'show advanced options', 1 RECONFIGURE WITH OVERRIDE GO SP_CONFIGURE 'Database Mail XPs', 1 RECONFIGURE WITH OVERRIDE GO EXEC sp_configure 'ad

我正在使用下面的查询将SQL结果传输到现有的Excel文件。是否可以将它们转移到新的excel工作表中?使用SSIS我们可以做到这一点,但我想知道是否有任何可能在SSMS中做到这一点

SP_CONFIGURE 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
GO

SP_CONFIGURE 'Database Mail XPs', 1
RECONFIGURE WITH OVERRIDE
GO

EXEC sp_configure 'ad hoc distributed queries', 1
RECONFIGURE
GO
EXEC sp_MSset_oledb_prop N'Microsoft.ACE.OLEDB.12.0', N'AllowInProcess', 1   

INSERT INTO OPENROWSET 
   ('Microsoft.ACE.OLEDB.12.0', 
   'Excel 8.0;Database=E:\LessThan1300\OutofScope.xlsx;','select * from [Sheet1$]')
   select * from tboutofscope 
   where InflowDate >= CONVERT(date,getdate())

您可以按如下方式创建模板文件的副本:

DECLARE @sqlscript VARCHAR(4000), @pathtotemplatefile VARCHAR(MAX) = 'E:\LessThan1300\template.xlsx', @pathtonewfile VARCHAR(MAX) = 'E:\LessThan1300\OutofScope.xlsx', @xlsxdatabase varchar(4000)
--SET @pathtotemplatefile = 'c:\i\1.xlsx'
--SET @pathtonewfile = 'c:\i\2.xlsx'
SET @sqlscript='copy ' + @pathtotemplatefile + ' ' + @pathtonewfile
EXECUTE master..xp_cmdshell @sqlscript, no_output

set @xlsxdatabase = 'Excel 8.0;Database=' + @pathtonewfile + ';'

INSERT INTO OPENROWSET 
   ('Microsoft.ACE.OLEDB.12.0', @xlsxdatabase,'select * from [Sheet1$]')
   select * from tboutofscope 
   where InflowDate >= CONVERT(date,getdate())

您可以根据需要动态更改新文件的名称,“创建”它,然后用预期数据填充它。

据我所知,您的查询很好。你这里有什么错误吗?您的工作表在文件中是否命名为Sheet1?它是在SQL server的E:驱动器上还是需要网络路径?是否尝试使用查询创建新工作表?如果我有现有工作表,则此查询可以正常工作。我想对新的excel文件执行同样的操作。这是一个正在进行的excel报告吗?您是否考虑过使用power query?您希望先创建新的xlsx文件,或者您有一个xlsx文件并希望将数据放在新的工作表上?如果您需要一个新文件,您可以尝试使用bcp。谢谢。但模板文件的内容正在复制到新文件。我将“复制”更改为“移动”,然后删除模板并创建新文件。我可以将查询结果转储到一个新文件中吗?您应该创建一个新的空xlsx文件作为模板(或者从OutofScope.xlsx中取出一个,删除其中的所有行,并将其命名为“OutofScope_template.xlsx”),并在每次需要导出新文件时使用(例如复制到OutofScope.xlsx)。模板文件应该保留在其位置,而不进行任何更改。我尝试了此操作。但是模板文件的内容没有被移动。你是什么意思?我的意思是下面的SQL没有删除模板文件的内容<代码>插入到OPENROWSET('Microsoft.ACE.OLEDB.12.0','Excel 8.0;数据库=D:\POPAClause\Template.xlsx;','select*from[Sheet1$]')选择顶部(4)*从tbLogin声明@sqlscript VARCHAR(4000),@pathtotemplatefile VARCHAR(MAX)='D:\POPAClause\Template.xlsx',@pathtonewfile VARCHAR(MAX)='D:\POPAClause\T3.xlsx'SET@sqlscript='copy'+@pathtotemplatefile++''+@pathtonewfile EXECUTE master..xp\u cmdshell@sqlscript,无输出