【发布时间】:2013-05-10 04:53:51
【问题描述】:
我有一个 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) 将 MERGE 语句包装在 EXEC() 中,这样就不会提前编译。
4) 在 SSIS 的相关步骤中将 Bypass Prepare 设置为 true。
编辑:
带有存储过程的服务器正在运行 SQL Server 2008。链接服务器是 2008 R2。
【问题讨论】:
-
有点笨拙,但是你能不能每次重新创建时将数据(不使用SSIS)从重新创建的数据库传输到静态数据库,并在视图中引用静态数据库.我不确定有什么方法可以让 SSIS 与一个被删除并重新创建的数据库配合得很好。除非你每次都重新创建你的 SSIS 包。
-
您使用的是什么版本的 SSIS?
-
有一些相关的讨论here。
标签: sql-server tsql stored-procedures ssis sql-merge