2016-11-18 30 views
0

我想使用從存儲過程調用的vba腳本生成一些excel報告。我的團隊獲得了幾乎相同的商業智能解決方案,之前他們使用的VBA腳本可以在其中打開帶有宏的excel文件。從SQL腳本執行CMD的最佳方法

報告生成過程遵循以下路徑:

還有,還有我們稱之爲正準備和計算數據的另一種方法,由每週計劃任務執行的SQL存儲過程,然後我們打開 下面的腳本向運行Excel。

下面是這個腳本的樣子:

Set objExcel = CreateObject("Excel.Application") 
Set objWorkbook = objExcel.Workbooks.Open("E:\Path\To\Excel.xlsm") 

我們把這個劇本以這樣一種方式:

EXEC master..xp_cmdshell 'C:\WINDOWS\SysWOW64\WSCRIPT.EXE Z:\Path\To\Script.vbs' 

我有一些問題WSCRIPT.EXE,它的開幕報告時掛,當我正在尋找解決方案,我已經閱讀了大量關於不使用XP_CMDSHELL的解決方案。問題是:有沒有辦法避免使用XP_CMDSHELL並且不要從頭開始創建報告生成路徑?我有點匆忙,所以我沒有時間寫新程序等。

+0

嘗試使用'cscript.exe'而不是'wscript.exe' https://technet.microsoft.com/en-gb/library/bb490816.aspx。 'Wscript'向GUI提出錯誤和消息 - 這可能是掛起過程的原因。 –

+0

如果可以將'Stored Procedures'改爲'Table-Valued-Functions'(最好是** inline-TVF **),這可以更容易完成。您只需打開一個ODBC連接並直接從SQL Server調用,例如'SELECT * FROM dbo.MyFunction(@ prm1,@ prm2,...)'。甚至有一位助理可以幫助你處理*外部數據* ... – Shnugo

回答

1

最好的方法是不通過sql server運行腳本。主要原因是安全性,錯誤處理和簡單的管理(例如,當您只需要運行一個部分時)。

你應該嘗試從你的應用程序從數據庫中獲取數據(在你的例子中它是xlsx文件 - 這不是從sql server programaticaly中運行的有問題的過程)。如果必須安排使用作業代理或任務調度程序(一個作業/任務包含更多部分)或創建ssis包,或者通過鏈接服務器/ openrowset存在metods,那麼如何直接將數據寫入excel。

但是,當您使用適當的錯誤處理它也可以在xp_cmdshell。