2017-07-27 45 views
1

我正在使用下面的查詢將SQL結果傳輸到現有的Excel文件。是否有可能將它們轉移到新的Excel表單中?使用SSIS我們可以做到這一點,但我想知道在SSMS中是否有任何可能。是否可以將MS SQL結果傳輸到新的MS Excel文件?

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()) 
+0

您的查詢完全符合我所知。你在這裏得到任何錯誤嗎?您的工作表是否在文件中名爲Sheet1?它是在SQL服務器的E:驅動器上還是需要網絡路徑?你是否試圖用查詢創建一個新工作表? –

+2

如果我有現有的工作表,此查詢工作正常。我想對新的excel文件做同樣的事情。 – Madhukar

+2

這是一個正在進行的excel報告嗎?你有沒有想過使用電源查詢? – Isaiah3015

回答

2

你可以這樣創建模板文件的副本:

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()) 

您可以根據自己的需要動態地改變新文件的名稱,「創造」,然後用料填充數據。

+1

謝謝。但模板文件的內容正在複製到新文件。我將「複製」更改爲「移動」,然後模板被刪除並創建一個新文件。任何方式,我可以將查詢結果轉儲到一個新的文件? – Madhukar

+1

您應該創建一個新的空xlsx文件作爲模板(或者將其中一個OutofScope.xlsx,從中刪除所有行並將其命名爲「OutofScope_template.xlsx」),然後使用(複製)它(例如OutofScope.xlsx)每次當你需要新文件出口時。模板文件應該保留在沒有更改的位置。 –

+0

我試過了。但模板文件的內容沒有被移動。 – Madhukar

相關問題