簡體   English   中英

在SSMS中將存儲過程結果集導出到Excel

[英]Export stored procedure result set to Excel in SSMS

我正在使用 SSMS 並嘗試將存儲過程的結果導出到新的 excel 文件。 SP 接受一個 int 參數,但我找不到在查詢中調用它的方法。

最新努力-

EXEC sp_makewebtask 
    @outputfile = 'C:\Users\me\Documents\testing.xls', 
    @query = **ExportAsExcel** N'@id' = 123
    @colheaders =1, 
    @FixedFont=0,@lastupdated=0,@resultstitle='Testing details'

運行存儲過程會產生兩個數據表,我需要在單獨的工作表上。 你們中的任何人都可以提出更好的方法來解決這個問題嗎? 它甚至不需要自動化,我只需要獲取正確的數據。 sp 名稱在上方以粗體顯示。

謝謝你的時間,

H

我建議您將存儲過程拆分為兩個過程,每個過程分別返回一個單獨的表並將它們調用到不同的工作表。

有多種方法可以使用 SQL 將數據返回到 Excel

這是Joshua 的代碼中我最喜歡的(您不必使用參數):

  1. 選擇 Excel 功能區上的“數據”選項卡,然后在“獲取外部數據”組中選擇“來自其他來源”下拉列表。 然后選擇“來自 Microsoft Query”

  2. 在“選擇數據源”彈出框中,選擇您的 SQL Server,然后點擊“確定”。

  3. 如有必要,關閉“添加表”彈出窗口。

  4. 單擊“SQL”按鈕,或選擇“查看”>“SQL”以打開 SQL 彈出式編輯器。

  5. 輸入以下語法:{CALL myDatabaseName.dbo.myStoredProc (?, ?, ?)}

    例如:{CALL northwind.dbo.spGetMaxCost (?, ?, ?)}

    確保在 call 語句周圍包含波浪形大括號。 每個問號 (?) 表示一個參數。 如果您的存儲過程需要更多或更少的參數,請根據需要添加或減去問號。

  6. 點擊確定按鈕。 應該會彈出一個問題框,上面寫着“SQL 查詢無法以圖形方式表示,還要繼續嗎?”,只需點擊“確定”按鈕即可。

  7. 現在將要求您提供上面包含的每個問號的示例參數。 為您要查詢的數據輸入有效的參數值。

  8. 輸入最后一個參數后,您應該會在 Microsoft Query 中返回一些結果。 如果它們看起來不錯,請關閉 Microsoft Query。

  9. 您現在應該看到“導入數據”彈出窗口。 單擊“屬性”按鈕,這將顯示“連接屬性”彈出窗口。

  10. 選擇定義選項卡,然后選擇參數按鈕。 您現在應該會看到一個“參數”彈出窗口,您可以在其中將參數連接到特定單元格。

  11. 選擇從以下單元格獲取值,然后通過單擊帶有箭頭的小框連接到 Excel 中將保存參數的適當單元格。

  12. 如果您希望每次更改包含參數的單元格時都刷新數據,請選中“單元格值更改時自動刷新”框

  13. 繼續如上處理其他參數。 完成后,單擊“確定”以返回“連接屬性”彈出窗口。 單擊“確定”返回“導入數據”彈出窗口,然后再次單擊“確定”。

  14. 您現在應該直接從您的存儲過程中獲得一些數據。

您最終將獲得類似於以下內容的連接信息:

連接信息

而且,如果您使用工作表中的參數,那么,例如,

這不是您問題的直接答案,但可以使用 Excel VBA 和連接來連接到 SQL Server 存儲過程,為其提供參數,並在 Excel 中返​​回 SP 結果集。 查看我的文章Microsoft Excel 和 SQL Server:自助服務 BI,為用戶提供所需的數據,用於圖像和代碼繁重的演示。

祝你好運。

那里有太多細節無法在一個 SO 問題中發布,否則我會在這里做。

我開發了 SSMSBoost 插件,我們已經實現了該功能,允許您以 3 種方式將數據導出到 excel(包括在一個文件中創建多個工作表):

  1. 您可以通過一次操作將所有結果網格導出為“打開工作表”文件格式,該文件格式 excel 理解並正確顯示。 此文件格式支持多個工作表。 使用方法:在SSMS中右擊數據網格,選擇“腳本網格數據”->“Excel”模板->所有網格->ToDisk。 您還可以查看生成的文件以了解其工作原理。 如果您想保持獨立於加載項,則可以在存儲過程中實現相同的功能。 下面還提供了示例 XML。 (2 個 excel 表,1 個列名和 1 個值)

 <?xml version="1.0"?> <?mso-application progid="Excel.Sheet"?> <Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet" xmlns:html="http://www.w3.org/TR/REC-html40"> <ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel"> </ExcelWorkbook> <Styles> <Style ss:ID="sH1"><Font ss:Bold="1"/></Style> <Style ss:ID="sD1"><NumberFormat ss:Format="General Date"/></Style> <Style ss:ID="sD2"><NumberFormat ss:Format="Short Date"/></Style> <Style ss:ID="sD3"><NumberFormat ss:Format="Short Time"/></Style> </Styles> <Worksheet ss:Name="GridResults1"> <Table> <Row> <Cell ss:StyleID="sH1"><Data ss:Type="String">ColumnNameA</Data></Cell> </Row> <Row> <Cell><Data ss:Type="Number">1</Data></Cell> </Row> </Table> </Worksheet> <Worksheet ss:Name="GridResults2"> <Table> <Row> <Cell ss:StyleID="sH1"><Data ss:Type="String">ColumnNameB</Data></Cell> </Row> <Row> <Cell><Data ss:Type="Number">1</Data></Cell> </Row> </Table> </Worksheet> </Workbook>

  1. 您還可以從 SSMS 網格復制粘貼數據,右鍵單擊它並選擇“將選擇復制為 XML 電子表格 (Excel)”。 數據將被復制保留數據類型。

  2. 更高級的選項是我們的“執行后處理程序”功能。 它允許您在查詢執行完成后運行某些操作。 您也可以在此處安排自動導出到 Excel 文件。

希望這會有所幫助,有或沒有 SSMSBoost ;)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM