Связанная база данных 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.

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


person dpmattingly    schedule 24.07.2009    source источник


Ответы (3)


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

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

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

person BrianD    schedule 24.07.2009
comment
Сообщение 7356 все еще происходит в OPENQUERY. Просто использование функции не поможет - person Taurus Dang; 15.05.2018
comment
@TaurusDang это работает для моего случая. Вы нашли решение своей проблемы? - person ps2goat; 03.09.2020

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)
person Raj    schedule 24.07.2009

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

1) Шаг 1:

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

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

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

• Выберите SQL Native Client в качестве поставщика.

• Добавьте sql_server в поле «Имя продукта» (это магия).

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

2) Шаг 2:

• На вкладке «Безопасность» — укажите соответствующие параметры безопасности (например, контекст безопасности)

3) Шаг 3:

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

4) Шаг 4:

• Наслаждаться.

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

person Thiago N. Bergonsi    schedule 12.02.2015
comment
Поскольку вопрос касается подключения к другому серверу MS SQL, а не к какой-либо другой СУБД (mySQL, PostgreSQL, ...), этот ответ является наиболее подходящим для этого случая (нативный способ намного более эффективен, чем ODBC). Но это не сработает, если ваш 2-й сервер не является сервером MS SQL. - person DestyNova; 14.06.2016