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

Ben*_*att 6 t-sql sql-server ssis stored-procedures 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)".
Run Code Online (Sandbox Code Playgroud)

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

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

到目前为止,我尝试过这些东西:

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

2)定义包含MERGE的SP WITH RECOMPILE.

3)包装MERGE语句,EXEC()因此不会提前编译.

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

编辑:

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

Kyl*_*ale 10

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

1)通话

DBCC FREEPROCCACHE
Run Code Online (Sandbox Code Playgroud)

在链接的服务器上.由于数据库每天都被丢弃,因此清除缓存可能不会对数据库的其他用户造成负担.

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

  • DBCC FLUSHPROCINDB(db_id(@DatabseName)); (3认同)