Связанная база данных SQL Server, дающая ошибку "несогласованные метаданные"

В настоящее время я запускаю программный пакет сторонних разработчиков, который использует SQL Server как свою базу данных. У меня есть второй экземпляр SQL Server, работающий в другом месте, и некоторые приложения, которые я создаю в этом экземпляре, SQL Server должны получить доступ к некоторым данным в стороннем программном обеспечении. Итак, я создал ODBC-соединение между ящиками и настроил сторонний SQL-сервер как связанный сервер в моей версии SQL Server. В качестве теста я выполнил что-то вроде следующей инструкции с моего SQL-сервера, обратившись к одной из сторонних таблиц:

SELECT * FROM LinkedServerName.SchemaName.dbo.TableName

Для чего я получил эту ошибку:

OLE DB error trace [Non-interface error:  Column 'TableRowVersion' (compile-time
ordinal 4) of object '"SchemaName"."dbo"."TableName"' was reported to have a
DBCOLUMNFLAGS_ISROWVER of 0 at compile time and 512 at run time].

Msg 7356, Level 16, State 1, Line 1

OLE DB provider 'MSDASQL' supplied inconsistent metadata for a column. Metadata
information was changed at execution time.

Эта ошибка аналогична для любой другой таблицы, к которой я пытаюсь получить доступ. Что означает эта ошибка, и есть ли способ вокруг нее?

Ответ 1

У меня это случалось несколько раз. Единственным обходным решением, которое я нашел, было использование OPENQUERY.

SELECT * FROM OPENQUERY(LinkedServerName, 'SELECT * FROM DBName.Schema.Table')

Кроме того, в элементе, который вы опубликовали выше, указано неправильное имя 4 части (может быть, это опечатка, но я не был уверен). Это должно быть LinkedServerName.DBName.SchemaName.TableName

Ответ 2

Server: Msg 7356, Level 16, State 1, Line 1 

OLE DB provider 'MSDASQL' supplied inconsistent metadata for a column. 
Metadata information was changed at execution time.

Если вы используете синтаксис имени из четырех частей для запроса данных из базы данных связанного сервера, вы можете получить это сообщение об ошибке. Чтобы обойти эту проблему, вы можете использовать синтаксис OPENQUERY для запроса данных из базы данных связанных серверов. Вы можете включить флаг трассировки 7300 для получения более подробной информации об этом сообщении об ошибке. Чтобы включить флаг трассировки 7300, запустите следующий оператор Transact-SQL:

DBCC TRACEON(7300)

Ответ 3

Я решил это с помощью этих шагов

1) Шаг 1:

• В SQL Server Management Studio откройте связанные серверы, а затем "Новый связанный сервер".

• Внутри появившегося мастера - выберите вкладку "Общие".

• Укажите имя псевдонима в поле "Связанный сервер".

• Выберите собственный клиент SQL в качестве поставщика.

• Добавьте sql_server в поле "Имя продукта" (это волшебство).

• В "Источник данных" - укажите имя хоста, который будет использоваться в качестве связанного сервера.

2) Шаг 2:

• Вкладка "Безопасность" - укажите правильные параметры безопасности (например, контекст безопасности)

3) Шаг 3:

• На вкладке "Параметры сервера" установите "Доступ к данным", RPC, "Rpc Out" и "Использовать удаленную совместную работу".

4) Шаг 4:

• Наслаждайтесь.

http://alexpinsker.blogspot.com.br/2007/08/how-to-give-alias-to-sql-linked-server.html