我目前正在运行一个第三方软件套件,它使用 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.
此错误与我尝试访问的任何其他表相同。这个错误是什么意思,有解决办法吗?
这种情况我已经发生过好几次了。我发现的一种解决方法是使用 OPENQUERY。
SELECT * FROM OPENQUERY(LinkedServerName, 'SELECT * FROM DBName.Schema.Table')
此外,您上面发布的选择有一个不正确的 4 部分名称(可能只是一个拼写错误,但我不确定)。应该是
LinkedServerName.DBName.SchemaName.TableName
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)
我通过以下步骤解决了这个问题:
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
虽然这个问题很老了,但当人们使用链接服务器时,它还是很常见的。这就是我解决这个问题的方法(正如你所看到的,一个特定的列似乎造成了这个问题)
这通常可以解决问题