我有一个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 WITH RECOMPILE
的SP。
3)在EXEC()
中包装MERGE语句,以便不会提前编译。
4)在SSIS的相关步骤中将Bypass Prepare
设置为true。
修改:
具有存储过程的服务器正在运行SQL Server 2008.链接服务器是2008 R2。
答案 0 :(得分:10)
所以问题是你正在使用链接服务器对象的同义词,它不能很好地与OLEDB的元数据目录一起使用(这就是生成你在错误消息中看到的那些数字的原因。)有两种解决方案:
1)致电
DBCC FREEPROCCACHE
链接服务器上的。由于数据库每天都被删除,清除缓存可能不会对数据库的其他用户造成负担。
2)在存储过程中使用完整的四部分表示法(ServerName.DatabaseName.SchemaName.ObjectName)。