6

我有一个 SQL Server 存储过程,每次使用 手动运行时都能正确执行EXEC,但是当它作为 SSIS 包的一部分运行时,它会失败并出现如下错误:

Executing the query "EXECUTE (ProcName)   " failed with the following error: 
"The OLE DB provider "SQLNCLI10" for linked server "(OtherServer)" reported a 
change in schema version between compile time ("177833127975044") and 
run time ("177841717910098") for table (Server.Database.Schema.Table)".

该过程是MERGE将视图中的数据合并到与 SP 位于同一服务器上的另一个数据库中的表中的语句。

视图是指链接服务器OtherServer。链接服务器上引用的数据库每晚都会被删除并重新创建。

到目前为止,我已经尝试过这些事情:

1) 在运行 MERGE 之前删除并重新创建视图。

2) 定义包含 MERGE 的 SP WITH RECOMPILE

3) 将 MERGE 语句包装进去,EXEC()这样它就不会被提前编译。

4)Bypass Prepare在 SSIS 中的相关步骤上设置为 true。

编辑

带有存储过程的服务器正在运行 SQL Server 2008。链接服务器是 2008 R2。

4

1 回答 1

10

所以问题是你使用的是链接服务器对象的同义词,它不能很好地与 OLEDB 的元数据目录配合使用(这就是生成你在错误消息中看到的那些数字的原因。)有两种解决方案:

1) 打电话

DBCC FREEPROCCACHE

在链接服务器上。由于无论如何每天都会删除数据库,因此清除缓存可能不会对数据库的其他用户造成如此大的负担。

2) 在存储过程中使用完整的四部分表示法 (ServerName.DatabaseName.SchemaName.ObjectName)。

于 2013-05-15T15:22:24.983 回答