2014-06-13 68 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上执行语句。 –