gpt4 book ai didi

sql-server - 为什么在为非 xml 数据查询链接服务器时出现错误 "Xml data type is not supported in distributed queries"?

转载 作者:数据小太阳 更新时间:2023-10-29 01:37:08 25 4
gpt4 key购买 nike

我有两个名为 DATA01DATA02 的 SQL Server(运行 SQL Server 2008)。 DATA02 有一个链接服务器定义 LINK,它指向 DATA01,并设置了合适的用户映射。在 DATA01 上有一个数据库 MyDatabase 包含以下两个表:

CREATE TABLE T_A (
Id int
)

CREATE TABLE T_B (
Id int,
Stuff xml
)

当我从 DATA02 运行此命令时,我得到了预期返回的数据:

SELECT Id FROM LINK.MyDatabase.dbo.T_A;

但是,当我从 DATA02 运行此命令时,出现错误:

SELECT Id, Stuff FROM LINK.MyDatabase.dbo.T_B;

错误是

Xml data type is not supported in distributed queries. Remote object 'DATA02.MyDatabase.dbo.T_B' has xml column(s).

奇怪的是,这个命令:

SELECT Id FROM LINK.MyDatabase.dbo.T_B;

也出现同样的错误,即使我没有SELECTxml 列!这是怎么回事?

最佳答案

这是 SQL Server 中的缺陷。仅仅 存在 表中的 xml 列会阻止它参与分布式查询(例如,通过链接服务器连接进行查询)。这is mentioned in this 'retired' documentation .当前版本的文档中似乎没有提及这一点。

Microsoft Connect 上曾经有相关的错误报告,但现在已“停用”,取而代之的是 Azure 反馈论坛。 This feedback item关闭并指示“请直接从产品文档提交反馈”,如果产品文档确实提到了这一点,那将很好。 This other feedback item包括从 Connect 迁移的评论,状态为“未计划”。

曾经存在的一个 Connect 错误报告提供了两个解决方法:

  1. >

    Create [a] view without the XML column(s) on remote server and query that.

    在您的示例中,这将涉及向 MyDatabase 添加一个 View 看起来像这样:

    CREATE VIEW V_T_B AS SELECT Id FROM T_B;

    然后您可以通过链接查询此 View 以获取 Id数据。请注意,类似

    SELECT Id FROM ( SELECT Id FROM T_B ) T_B;

    工作。

  2. >

    Use a pass-through query in the form

    SELECT * from OPENQUERY (... )

    这种方法的优点是不需要对源数据库;缺点是它不再可能对本地数据和链接数据使用标准的四部分命名。这查询看起来像

     SELECT Id FROM OPENQUERY(DATA02, 'SELECT Id FROM T_B') T_B;

    请注意,如果您确实确实想要 xml 数据,则此方法(以及转换为非 xml 数据类型)将需要:

     SELECT Id, CAST(Stuff AS XML) Stuff 
    FROM OPENQUERY(DATA02, 'SELECT Id, CAST(Stuff AS nvarchar(max)) Stuff
    FROM T_B') T_B;

请注意,该错误首先在 SQL Server 2005 中报告,在 SQL Server 2017 中仍未修复。我还无法检查 SQL Server 2019。

关于sql-server - 为什么在为非 xml 数据查询链接服务器时出现错误 "Xml data type is not supported in distributed queries"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14442039/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com