2012-07-25 126 views
0

我對Excel中的宏以及如何使用它們有疑問。我最近創建了一個SQL Query,它將打擊幾個TFS數據庫來提取數據。我只是想從excel中運行這個腳本,這樣腳本的輸出就會自動發佈在excel中的各個列標題中。通過使用VB宏,我已經在excel中看到了這一點。在Excel宏中運行SQL腳本

作爲一種解決方法,我創建了一個小的bat文件來運行sqlcmd,檢查包含該腳本的sql文件,並最終將輸出推送到csv文件。唯一的問題是,CSV的輸出會將結果推送到一行中,而不會將它們與標題分開。

爲batfile當前代碼:

sqlcmd -E -S TFSServer\TFS2010 -i C:\test\testquery.sql -o C:\test\test.csv

+0

你是說所有的SQL行被壓縮成一個單一的線?或者每行都在一個列中? – LittleBobbyTables 2012-07-25 15:14:58

+0

@LittleBobbyTables,對不起,我的意思是說每一行都是一列。 – 2012-07-25 15:28:14

+1

事實之後,您應該可以只是將'Data> Text to Columns'。 – LittleBobbyTables 2012-07-25 15:29:56

回答

1

爲什麼不使用DATAEXTRACTION的SSIS包或SSRS報告嗎?宏是如此......上個世紀。

如果你堅持使用宏,這裏有一個例子:

Dim con As ADODB.Connection, _ 
cmd As ADODB.Command, _ 
rs As ADODB.Recordset, _ 
strSQL As String, _ 
i As Integer 

strSQL = "EXEC SP_StoredProcedureToGetData" 

Set con = New ADODB.Connection 
con.Open "Provider=SQLOLEDB;Data Source=SQLSERVER;" & _ 
    "Initial Catalog=DATABASE;User ID=USERNAME;Password=PASSWORD" 

Set cmd = New ADODB.Command 
With cmd 
    .ActiveConnection = con 
    .CommandText = strSQL 
    .CommandType = adCmdStoredProc 
End With 

Set rs = New ADODB.Recordset 
With rs 
    .CursorLocation = adUseClient 
    .CursorType = adOpenKeyset 
    .LockType = adLockBatchOptimistic 
End With 
Set rs = cmd.Execute 

Cells(1, 1) = "Column1" 
Cells(1, 2) = "Column2" 
Cells(1, 3) = "Column3" 
Cells(1, 4) = "Column4" 
Cells(1, 5) = "Column5" 
Cells(2, 1).CopyFromRecordset rs 

Set con = Nothing 
Set cmd = Nothing 
Set rs = Nothing 
+0

我對你提出的答案有疑問。看起來這段代碼要求你將腳本加載到sql server上,以便它可以簡單地運行,這是否正確?如果是這樣,那是不可能的,因爲我們不想加載任何額外的存儲過程,因爲這是內部生產服務器。我希望能夠以只讀訪問的方式從客戶機/帳戶運行腳本。 – 2012-07-25 17:05:29