我有一个 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
语句,它将 View 中的数据合并到与 SP 位于同一服务器上的另一个数据库的表中。
该 View 引用链接服务器OtherServer
。链接服务器上引用的数据库将被删除并每晚重新创建。
到目前为止,我已经尝试过以下方法:
1) 在运行 MERGE 之前删除并重新创建 View 。
2) 定义包含 MERGE WITH RECOMPILE
的 SP。
3) 将 MERGE 语句包装在 EXEC()
中,这样就不会提前编译它。
4) 在 SSIS 中的相关步骤中将绕过准备
设置为 true。
编辑:
带有存储过程的服务器运行的是 SQL Server 2008。链接服务器是 2008 R2。
最佳答案
所以问题是您正在使用链接服务器对象的同义词,这与 OLEDB 的元数据目录(这就是生成您在错误消息中看到的数字的原因)不能很好地配合。对此有两种解决方案:
1) 调用
DBCC FREEPROCCACHE
在链接服务器上。由于数据库每天都会被删除,因此清除缓存可能不会对数据库的其他用户造成太大负担。
2) 在存储过程中使用完整的四部分表示法 (ServerName.DatabaseName.SchemaName.ObjectName)。
关于sql-server - 从 SSIS 运行时,存储过程返回架构版本更改错误,但直接运行时则不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16568083/