链接的 SQL Server 数据库出现“元数据不一致”错误

问题描述 投票:0回答:4

我目前正在运行一个第三方软件套件,它使用 SQL Server 作为数据库。我有第二个 SQL Server 实例在不同的位置运行,并且我在该实例 SQL Server 中构建的一些应用程序需要访问第三方软件中的一些数据。因此,我在两个盒子之间创建了一个 ODBC 连接,并在我的 SQL Server 版本上将第三方 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.

此错误与我尝试访问的任何其他表相同。这个错误是什么意思,有解决办法吗?

sql-server odbc oledb linked-server
4个回答
46
投票

这种情况我已经发生过好几次了。我发现的一种解决方法是使用 OPENQUERY。

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

此外,您上面发布的选择有一个不正确的 4 部分名称(可能只是一个拼写错误,但我不确定)。应该是

LinkedServerName.DBName.SchemaName.TableName


8
投票
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)

5
投票

我通过以下步骤解决了这个问题:

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


0
投票

虽然这个问题很老了,但当人们使用链接服务器时,它还是很常见的。这就是我解决这个问题的方法(正如你所看到的,一个特定的列似乎造成了这个问题)

  1. 在 SSMS 中将服务器添加为链接服务器并使用您指定的别名
  2. 使用 OpenQuery
  3. 请勿使用星号 (*)...命名您真正需要的列

这通常可以解决问题

© www.soinside.com 2019 - 2024. All rights reserved.