2014-06-13 99 views
1

如何將參數傳遞給SSIS中的OLE DB源中的OpenQuery SQL語句?如何將參數傳遞給SSIS中的OpenQuery OLE DB源

示例: 標準SQL命令:SELECT FIRSTNAME,LASTNAME FROM CUSTOMERS WHERE PERSONID =?

OPENQUERY命令不起作用:

SELECT * 
FROM OPENQUERY(CRMDB 
      , 'SELECT FIRSTNAME, LASTNAME FROM PUBLIC.CUSTOMERS WHERE PERSONID = ''?'' ') 

更多詳細信息,如果需要:

  1. SSIS包將使用foreach循環使用OPENQUERY來查詢鏈接服務器,因此需要通過它一個參數。
  2. 必須使用鏈接的服務器,並且必須使用OpenQuery。
  3. 表太大而無法導入本地表中進行查詢。

任何幫助,將不勝感激。

編輯: 使用SQL Server 2008和Visual Studio 2008 BIDS

+0

什麼版本的SQL Server? – Bryan

+0

添加到主要細節。 –

回答

0

我沒有看到它用得不多,但EXECUTE...AT是完美的,如果你面對的鏈接服務器的查詢。

DECLARE @PersonId INTEGER = <value>; 
EXECUTE ('SELECT FIRSTNAME, LASTNAME FROM PUBLIC.CUSTOMERS WHERE PERSONID = ?', 
     @PersonId) AT CRMDB; 

這需要RPCRPC Out爲鏈接服務器中啓用。

Linked server properties

+0

不幸的是,這並沒有奏效。在SQL企業管理器中執行使CRMDB RPC不可用。當我使用Visual Studio 2008 BIDS添加它時,它不能識別PersonID =?作爲參數的地方,給出錯誤「無參數可用」。謝謝你的嘗試。 –

+0

@ConsultingMechanic RPC必須爲鏈接的服務器啓用。 – Bryan

+0

已啓用RPC,但Visual Studio 2008 BIDS不承認?作爲參數。 在Enterprise Manager中運行上面的查詢會導致錯誤無法在遠程服務器CRMDB上執行語句。 –