2014-01-23 31 views
0

我正在創建一個.xlsm文件,其中包含具有三個輸入參數的報告。輸入參數後,最終用戶運行一個宏,該宏將參數發送到存儲過程,運行存儲過程並將數據顯示回Excel。將參數列表從Excel 2010傳遞到MS SQL 2012

我有proc很好地運行,但現在,對於三個參數(@AccountNumber和@ActiveAgreement)中的兩個,最終用戶希望爲每個參數輸入多個值。這裏是我目前的宏代碼:

Sub RefreshQuery() 
With ActiveWorkbook.Connections("ImpactDetailSheet").OLEDBConnection 
    .CommandText = "DECLARE @PriceList NVARCHAR(10), @AccountNumber NVARCHAR(10), @ActiveAgreement NVARCHAR(10) SET @PriceList = '" & Range("J1").Value & "' SET @AccountNumber = '" & Range("J2").Value & "' SET @ActiveAgreement = '" & Range("J3").Value & "' EXEC [dbo].[Impact] @PriceList, @AccountNumber, @ActiveAgreement" 
End With 
ActiveWorkbook.Connections("ImpactDetailSheet").Refresh 
ActiveWorkbook.Connections("ImpactActiveAgreementSheet").Refresh 
ActiveWorkbook.Connections("ImpactKickoutSheet").Refresh 
End Sub 

我的問題是如何改變代碼以包含給定參數的多個值?從我所知道的情況來看,如果我使用的是列表,我需要更新存儲過程以在參數周圍使用括號(例如(@AccountNumber))。

另外,是否有可能有1個單元格包含多個參數?例如,用逗號或類似的東西分隔,而使用多個單元格作爲附加參數。

非常感謝提前。

回答

2

這聽起來像是你想通過一個將在你的存儲過程(SP)中使用的帳號和活動協議的列表。我認爲有兩種選擇:要麼爲每個參數組合執行多次存儲過程,要麼更改SP以獲取列表而不是單個值並處理此列表(如傳遞數組)。

鑑於你稱呼SP的方式,我認爲後者會更合適。例如,如果將SP更改爲接收@AccountNumber作爲VARCHAR(MAX),則可能會收到以逗號分隔的字符串,例如, 1005,1234,1754等可以存儲在工作表上的單元格中。然後你可以在SP中拆分這個字符串並在你的查詢中使用它。

對於SQL上分割字符串的例子,請參閱SQL Server 2005中SplitInts功能在這裏推薦:How to pass an array into a SQL Server stored procedure

+0

此消息使我在正確的道路上。我創建了一個函數來分割字符串,並將結果修剪成一個新的表格,這個表格用於存儲過程。非常感謝您幫助我認真思考! –