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.

例如如下:
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,它工作正常

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

错误是:
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)
纽扣:
我理解错误的意思,但我不明白为什么它会抛出这个错误.
如果有人能帮我解决这个问题,我感激不尽?这对我来说非常紧迫.
当使用存储过程作为 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)
你能尝试一下这个吗?
| 归档时间: |
|
| 查看次数: |
4134 次 |
| 最近记录: |