2016-06-09 399 views
0

全部。SSIS Ole數據庫來源爲鏈接服務器的存儲過程,參數

我正在使用鏈接服務器的存儲過程。我想在ole db源中使用該過程。

我寫了查詢,它在SSIS中起作用。

select ID, 

LAST_NAME_ENG, 

LAST_NAME_G, 

FST_NAME_ENG, 

FST_NAME_G, 

BIRTHDATE 

from openquery (linkedserver, 
'exec [linkedserver].get_records @SESSION_ID = 12 , @SYSTEM = ''oCRM'', @ENTITY_NAME = ''CLIENT'' 

WITH RESULT SETS (([ID] [int] NOT NULL, 

[LAST_NAME_ENG] [varchar](50) NOT NULL, 

[LAST_NAME_G] [varchar](50) NOT NULL, 

[FST_NAME_ENG] [varchar](50) NOT NULL, 

[FST_NAME_G] [varchar](50) NOT NULL, 

[BIRTHDATE] [date] NOT NULL))'); 

我可以在SSIS ole db源代碼中使用它,併成功獲取所需的數據。但在下一步有問題:

我需要從SSIS而不是'12'將參數傳遞給@SESSION_ID。我找不到正確的方法來做到這一點。

有很多建議使用動態sql和構造具有所需參數值的完整查詢字符串,然後執行它,但如果我會這樣做 - SSIS無法從動態查詢中獲取列數據。

有沒有辦法解決它? 任何想法都會有幫助。

謝謝。

對此,尤里。

+0

你爲什麼不直接連接到其他服務器? –

+0

不幸的是,這是不允許的。 –

回答

1

創建一個字符串變量,比如SQL_Query。在變量定義中 - 設置EvaluateAsExpression並將表達式定義爲"your SQL statement ... @SESSION_ID = " + [User::Session_ID_Variable] + " rest of SQL statement"其中Session_ID_Variable包含您的條件值。如果Session_ID_Variable不是字符串 - 你必須將它轉換爲字符串(DT_WSTR, length)。結果在SQL_Query將成爲您的目標SQL表達式。
然後在OLE DB Source中指定變量作爲SQL命令源並選擇[User :: SQL_Query]
存儲過程必須返回所有情況下相同格式的結果集。 SP返回沒有結果集將失敗DataSource。

+0

嗨,Ferdipux。 非常感謝您的回答。它的作用是相同的。 但我只能在傳遞變量@SESSION_ID作爲現有會話的標識符時才能成功驗證並保存Ole DB Source塊。如果此類會話不存在 - 我收到錯誤 https://i.gyazo.com/5bbaf08a3884b8600439b6ea31212da1.png –

+0

這很正常。在包裝設計階段,您需要驗證所有組件;因此,OLE DB源必須返回一些行才能確定元數據。在運行時,null結果將會正常。 – Ferdipux

+0

https://i.gyazo.com/7e076b41384c2e8003637618fa13c0b6.png 不幸的是它不起作用( –

相關問題