2017-05-01 56 views
0

我根據Hadi給出的解決方案編輯了問題。SSIS - SQL命令 - 參數

我在VS 2013中使用SSIS。 我有一個名爲MyVariableList和Query的用戶變量。 enter image description here

這是在用戶變量查詢表達式: 「SELECT可樂,COLB FROM myTable的WHERE本身份識別碼IN(」 + @ [用戶:: MyVariableList] + 「)」 enter image description here

我有一個腳本任務設置@ [User :: MyVariableList]的值。

Dts.Variables["User::MyVariableList"].Value = sList; 

enter image description here

在那之後,我有一個數據流任務使用OLE DB源(從1個數據庫)到另一個OLE DB目標(另一臺服務器上的另一個數據庫)。 在OLE DB源代碼編輯器,我設置 數據訪問模式:SQL命令從變量 變量名:用戶::查詢 enter image description here

在OLE DB源連接,我已經設置了DelayValidation爲True enter image description here

之前,我甚至可以運行該軟件包,我得到這個錯誤 enter image description here 我該如何解決這個問題?謝謝

+1

如果你想使用分隔字符串逗號一樣,你需要使用動態SQL,這是使用表達式實現的。你不能使用參數來做到這一點。請參閱以下參考資料:https://jamessummerlin.com/2015/05/04/ssis-using-expressions-to-build-sql-statements-for-ado-net-connections/ http://stackoverflow.com/questions/ 17071451/ssis-passing-sql-command-as-variable-to-ole-db-source –

+0

MyProjectVariable屬於String類型,如果使用2個int類型的參數並傳遞這些參數,那麼它將起作用。 – observer

+2

Man!你在得到答案並接受答案後改變了整個問題?最好問一個新的,這不是堆棧溢出工作的方式! @faujong –

回答

1

首先,你是一個project parameter工作不是一個project variable

你不能這樣使用參數化的SQL命令實現,你必須建立一個變量中整個查詢,並把它作爲源(SQL命令從變量)

參數用於指定單個值,而不是串聯的查詢字符串

創建一個SSIS變量(User::Query),將變量Evaluate As Expression屬性更改爲True,並在變量Expression屬性中寫入表達式。像下面

"SELECT cola, colB FROM myTable WHERE myID IN (" + @[$Project::MyProjectVariable] + ")" 

注:使用工程參數的表達式中使用的語法如下:@[$Project::MyProjectVariable]

+0

謝謝大家。我做了Hadi的建議,但是當我在之前的腳本任務中設置MyProjectVariable(而不是硬編碼值)時,在我運行包之前,我已經在OLE DB Source中出錯了:「聲明無法準備「。和「附近語法錯誤」)「。」。在OLE DB源編輯器中,變量值是「SELECT cola,colB FROM myTable WHERE myID IN()」 - >這是因爲MyProjectVariable在腳本任務中設置。總之,我從1個數據庫查詢得到結果,從這個結果中,我想查詢另一個數據庫。這是做這件事的最好方法嗎?謝謝。 – faujong

+0

將oledb源'Delay Validation'屬性設置爲'True' – Hadi

+0

謝謝哈迪。在OLEDB源連接中,我將「DelayValidation」設置爲true,但仍然出現錯誤 – faujong