尝试调用T-SQL存储过程,该过程从SSIS包中的链接服务器中选择数据

vin*_*ela 10 sql-server ssis stored-procedures linked-server

我有一个场景,我试图从远程服务器(我刚读取权限)中选择表t1和t2中的一些数据来自另一个远程服务器的数据库db1中的S1(我是DBO,但实际上并不是全部)权限,以便我可以做任何我想做的事情)S2在DB db2中通过SSIS包进入表t1.

S1和S2都是链接服务器.我从S2链接到S2通过SSMS中的对象服务器.

现在,我在S2.db2中创建了一个存储过程sp1,它包含来自两个不同表的一些select语句,以及一系列日期的连接,这些日期作为参数传递给sp1.

SP的输入参数

例如如下:

SELECT*from s1.db1.schema1.t1 LEFT JOIN s1.db1.schema1.t2 ON [CONDITION] WHERE [CONDITIONS]现在我的SSIS包有一个Dataflow任务,它有OLE DB源和Destination,连接字符串为s2.db2

在源代码中我直接在SQL命令中调用上面提到的查询并填充到目标表中,即S2.db2.t1,它工作正常

直接传递查询

但是当我尝试执行以下操作时,它会抛出错误

  1. 将2个包级别的DATETIME变量创建为v1,v2并传递默认值 - 无问题
  2. 在OLE DB SOURCE-> CONNECTION STRING - > SQL COMMAND - > EXEC sp1?中,?- 没问题
  3. 单击PARAMETERS选项卡并选择Para​​meter0和parameter1的用户参数 - 没问题
  4. 现在,当我说SQL命令窗口正常时,它给出了如下错误

调用SP时出错

错误是:

标题:Microsoft Visual Studio

FII54_CBI_TM51 [FII54_CBI 1 ]出错:SSIS错误代码DTS_E_OLEDBERROR.发生OLE DB错误.错误代码:0x80004005.OLE DB记录可用.来源:"Microsoft SQL Server Native Client 10.0"Hresult:0x80004005描述:"操作数类型冲突:int与日期不兼容".

FII54_CBI_TM51 [FII54_CBI 1 ] 出错:无法从数据源检索列信息.确保数据库中的目标表可用.


附加信息:

来自HRESULT的异常:0xC020204A(Microsoft.SqlServer.DTSPipelineWrap)


纽扣:

我理解错误的意思,但我不明白为什么它会抛出这个错误.

如果有人能帮我解决这个问题,我感激不尽?这对我来说非常紧迫.

Non*_*nym 2

当使用存储过程作为 OLEDB 源时,您应该确保在存储过程中具有:

SET NOCOUNT ON;
Run Code Online (Sandbox Code Playgroud)

然后在执行该过程之前添加:SET FMTONLY OFF

SET FMTONLY OFF;
EXEC CBI_MASTER_PID ?, ?
Run Code Online (Sandbox Code Playgroud)

你能尝试一下这个吗?