Sql-server – The OLE DB provider “SQLNCLI” for linked server X reported a change in schema version between compile time X and run time X for table [tablename]

linked-serversql server

The below error starts happening once a week at the same time every week.

The OLE DB provider "SQLNCLI" for linked server X reported a change in schema version between compile time X and run time X for table [tablename].
[SqlException (0x80131904): The OLE DB provider "SQLNCLI" for linked server "ABCDEF" reported a change in schema version between compile time ("175385004624084") and run time ("175393583420554") for table ""ABCDEF"."dbo"."TheViewOnLinkedServer"".]
   System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) +1950890
   System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) +4846875
   System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) +194
   System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) +2392
   System.Data.SqlClient.SqlDataReader.ConsumeMetaData() +33
   System.Data.SqlClient.SqlDataReader.get_MetaData() +83
   System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) +297
   System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) +954
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) +162
   System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method) +32
   System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method) +141
   System.Data.SqlClient.SqlCommand.ExecuteReader() +89
   XXXX.XXXX.Data.SqlHelper.ExecuteReader(SqlConnection connection, SqlTransaction transaction, CommandType commandType, String commandText, SqlParameter[] commandParameters, SqlConnectionOwnership connectionOwnership) in E:\WorkingFolderVSSNET\Lesa\Databases\Lesa.Net.Data\Lesa.Net.Data\SQLHelper.cs:671
   XXXX.XXXX.Data.SqlHelper.ExecuteReader(SqlConnection connection, CommandType commandType, String commandText, SqlParameter[] commandParameters) in E:\WorkingFolderVSSNET\Lesa\Databases\Lesa.Net.Data\Lesa.Net.Data\SQLHelper.cs:803
   XXXX.XXXX.XXXXX.XXXX.GetAttTypes(String ID, String App) +279

[ApplicationException: Error in GetAttTypes]
   XXXX.XXXX.XXXX.XXXX.XXXXXXX(String ID, String App) +507
   XXXX.XXXX.XXXX.XXXXX.XXXXX.Load(Int32 XXXX) +14717

[Exception: Error in XXXXXX.Load( XXXXX=XXXXXX) at XXXXX- for.]
   XXXX.XXX.XXX.XXXXXX.XXXXXX..ctor(String XXXXX, String XXXXX) +312
   XXXXXXX.XXXXXXXX.Page_Load(Object sender, EventArgs e) +2481
   System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +14
   System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +35
   System.Web.UI.Control.OnLoad(EventArgs e) +99
   System.Web.UI.Control.LoadRecursive() +50
   System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +627

To fix the problem I just run the alter statement for the view without any changes.

The view selects from another view on a linked server and does list the column names (doesn't select by *).

I am not able to duplicate the problem after it has been fixed yet because I can't figure out what could be causing it. I have tried rebuilding indexes to see if that is causing it but it doesn't seem to.

Any ideas on how to troubleshoot this or what the cause could be?

Best Answer

Are you using a synonym? The few cases I have seen people complaining of this, this fix worked - http://support.microsoft.com/kb/2498818 - What version/build are you on?