链接的SQL Server数据库给出"不一致的元数据"错误

dpm*_*gly 15 sql-server oledb odbc linked-server

我目前正在运行第三方软件套件,它使用SQL Server作为其数据库.我有一个在不同位置运行的第二个SQL Server实例,我在该实例中构建的一些应用程序SQL Server需要访问第三方软件中的某些数据.因此,我在框之间创建了一个ODBC连接,并在我的SQL Server版本上将第三方SQL服务器设置为链接服务器.作为测试,我从我的SQL服务器运行以下语句,访问第三方表之一:

SELECT * FROM LinkedServerName.SchemaName.dbo.TableName
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

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.
Run Code Online (Sandbox Code Playgroud)

对于我尝试访问的任何其他表,此错误都是相同的.这个错误意味着什么,是否有办法绕过它?

小智 38

我已经发生了几次这种情况.我找到的一个解决方法是使用OPENQUERY.

SELECT * FROM OPENQUERY(LinkedServerName, 'SELECT * FROM DBName.Schema.Table')
Run Code Online (Sandbox Code Playgroud)

此外,您在上面发布的选项有一个不正确的4部分名称(可能只是一个错字但我不确定).它应该是LinkedServerName.DBName.SchemaName.TableName

  • 消息 7356 仍然发生在 OPENQUERY 上。仅使用该功能无济于事 (2认同)

Raj*_*Raj 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.
Run Code Online (Sandbox Code Playgroud)

如果您使用四部分名称语法来查询链接服务器数据库中的数据,您可能会收到此错误消息.若要解决此问题,您可以使用OPENQUERY语法来查询链接的服务器数据库中的数据.您可以打开跟踪标志7300以接收有关此错误消息的更多详细信息.要打开跟踪标志7300,请运行以下Transact-SQL语句:

DBCC TRACEON(7300)
Run Code Online (Sandbox Code Playgroud)


小智 5

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

\n

1)第1步:

\n

\xe2\x80\xa2 在 SQL Server Management Studio 中打开链接服务器,然后打开“新建链接服务器”。

\n

\xe2\x80\xa2 在出现的向导中 \xe2\x80\x93 选择“常规”选项卡。

\n

\xe2\x80\xa2 在“链接服务器”字段中指定别名。

\n

\xe2\x80\xa2 选择 SQL Native Client 作为提供程序。

\n

\xe2\x80\xa2 在“产品名称”字段中添加 sql_server (这就是神奇之处)。

\n

\xe2\x80\xa2 在数据源\xe2\x80\x93 中指定要用作链接服务器的主机的名称。

\n

2)第2步:

\n

\xe2\x80\xa2 在安全选项卡 \xe2\x80\x93 中指定适当的安全选项(例如安全上下文)

\n

3)第3步:

\n

\xe2\x80\xa2 在“服务器选项”选项卡 \xe2\x80\x93 中,将“数据访问”、RPC、“Rpc Out”和“使用远程排序规则”设置为 true。

\n

4)第4步:

\n

\xe2\x80\xa2 享受吧。

\n

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

\n

  • 由于问题是关于与另一台 MS SQL 服务器的连接,而不是与其他 DBMS(mySQL、PostgreSQL 等)的连接,因此这个答案对于这种情况是最有效的(本机比 ODBC 性能更高)。但如果您的第二台服务器不是 MS SQL 服务器,它将无法工作 (3认同)