首页 > 解决方案 > XML AUTO 查询以 90 或更高的兼容模式返回派生表引用

问题描述

我目前正在执行从 2005 年到 2012 年的 SQL 服务器迁移。作为第一步,我生成了 DMA 报告并观察到大多数使用 XML Auto 的过程都是该报告的一部分。

MSDN提供以下信息:

当数据库兼容级别设置为 90 或更高时,在 AUTO 模式下执行的 FOR XML 查询返回对派生表别名的引用。当兼容性级别设置为 80 时,FOR XML AUTO 查询返回对定义派生表的基表的引用。

考虑以下查询,输出将在 2005 年和 2012 年(及更高版本)中有所不同

SELECT * FROM (SELECT a.id AS a, b.id AS b 
FROM Test a 
JOIN Test b ON a.id=b.id) AS DerivedTest 
FOR XML AUTO;

2005 年<a a="1"><b b="1"/></a><a a="2"><b b="2"/></a>

2012 年<DerivedTest a="1" b="1"/><DerivedTest a="2" b="2"/>

现在的问题是,2005 和 2012 版本都给了我相同的输出

<DerivedTest a="1" b="1"/><DerivedTest a="2" b="2"/>

需要您的帮助来确认是否需要修复受影响的 Tsql 对象。

MSDN 网址:https ://docs.microsoft.com/en-us/sql/sql-server/install/for-xml-auto-queries-return-derived-table-references-90-later-compatibility-mode?view =sql-server-2014&viewFallbackFrom=sql-server-2017

标签: sqlsql-serverxmlsql-server-2005sql-server-2012

解决方案


推荐阅读