从SSIS运行时,存储过程返回模式版本更改错误,但直接运行时则不会

时间:2013-05-15 14:41:10

标签: sql-server tsql stored-procedures ssis sql-merge

我有一个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。

1 个答案:

答案 0 :(得分:10)

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

1)致电

DBCC FREEPROCCACHE
链接服务器上的

。由于数据库每天都被删除,清除缓存可能不会对数据库的其他用户造成负担。

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