2009-06-26 60 views
0

我發現了一種直接(更快)地提取MS Sql表格的內容到excel的方法。但我不知道如何使用需要參數的存儲過程來完成此操作。是否可以直接提取存儲過程的結果到Excel文件中?我知道如何間接使用它(使用數據表),但速度太慢。非常感謝你。 PS:這是我用來做一些測試的方法。它適用於一個表格,但我需要的是提取存儲過程的結果:如何將存儲過程的結果直接導出到MS Excel文件?

Private Sub SqlToExcelTest2(ByVal excelFilePath As String, _ 
          ByVal nonExistingSheetName As String, _ 
          ByVal sqlServer As String, _ 
          ByVal sqlDatabase As String, _ 
          ByVal sqlUserName As String, _ 
          ByVal sqlPassword As String, _ 
          ByVal sqlTable As String) 

    Const excelConnStrTemplate As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=2"";" 

    Dim connStr As String = String.Format(excelConnStrTemplate, _ 
              excelFilePath) 

    Const adoQueryTemplate As String = "SELECT * INTO {0} FROM [odbc;Driver={{SQL Server}};" & _ 
    "Server={1};Database={2};UID={3};PWD={4}].[{5}] " 

    Dim query As String = String.Format(adoQueryTemplate, _ 
    nonExistingSheetName, _ 
    sqlServer, _ 
    sqlDatabase, _ 
    sqlUserName, _ 
    sqlPassword, _ 
    sqlTable) 

    Using oleConn As New OleDb.OleDbConnection(connStr), oleCmd As New OleDb.OleDbCommand(query, oleConn) 
     oleConn.Open() 
     oleCmd.ExecuteNonQuery() 
     oleConn.Close() 
    End Using 

End Sub 
+0

如果您只是偶爾進行測試,您是否可以使用Management Studio功能導出到Excel?將查詢輸出設置爲轉到Excel,然後在查詢窗口中運行sproc。 – DOK 2009-06-26 17:55:08

回答

0

Python是您的選擇嗎?

一個人爲的存儲過程,需要一個參數,並返回結果集:

create procedure usp_Temp @howmany tinyint 
as 
set nocount on 

create table #tmp (ID int identity, Letter char(1), String varchar(50)) 

declare @i tinyint 
set @i = 0 

while @i < @howmany 
begin 
    insert into #tmp (Letter, String) values('X', 'The quick brown fox...') 
    set @i = @i + 1 
end 

select * from #tmp 
set nocount off 

在Python中,你可以做這樣的事情:

import dbi 
import odbc 
import csv 

conn_str = 'Driver={SQL Server};Server=MyServer;Database=MyDb;Uid=MyLogin;Pwd=MyPwd' 
conn = odbc.odbc(conn_str) 
curs = conn.cursor() 

curs.execute('exec usp_temp @howmany = 15') 
results = curs.fetchall() 

curs.close() 
conn.close() 

writer = csv.writer(open('tmp.csv', 'wb'), delimiter = ',', 
    quoting = csv.QUOTE_MINIMAL) 

for result in results: writer.writerow(result) 

的Excel應該能夠開啓一個CSV文件沒有問題。

1

我沒有Excel,現在要檢查,但你可以嘗試:

  1. 啓動一個新的工作表中選擇菜單數據 - >導入,如「數據源上的東西錄製新宏
  2. 選擇你的表/視圖(我不知道,如果存儲過程也支持)
  3. 設置中的所有憑證等
  4. 遵循的步驟休息...
  5. 停止錄製宏

並查看生成的VBA代碼。

如果你總是運行相同的查詢(或幾個不同的),然後創建幾個在啓動時的自動刷新等數據源可能是你所需要的。

相關問題