示例:指定隐藏指令

此示例演示如何使用HIDE指令。 如果希望查询返回属性以对查询返回的通用表中的行进行排序,但不希望最终生成的 XML 文档中使用该属性,则此指令非常有用。

此查询构造此 XML:

<ProductModel ProdModelID="19" Name="Mountain-100">  
  <Summary>  
    <SummaryDescription>  
           <Summary> element from XML stored in CatalogDescription column  
    </SummaryDescription>  
  </Summary>  
</ProductModel>  

此查询生成所需的 XML。 查询识别两个列组,其列名称中的标记值分别为 1 和 2。

此查询使用 xml 数据类型的 query() 方法(xml 数据类型)查询 xml 类型的 CatalogDescription 列,以便检索摘要说明。 该查询还使用 xml 数据类型的 value() 方法(xml 数据类型)从 CatalogDescription 列中检索 ProductModelID 值。 生成的 XML 中不需要此值,但需要对生成的行集进行排序。 因此,列名 [Summary!2!ProductModelID!HIDE]包括 HIDE 指令。 如果 SELECT 语句中不包含此列,则必须按 [ProductModel!1!ProdModelID][Summary!2!SummaryDescription] 排序 xml 类型的行集,并且不能在 ORDER BY 中使用 xml 类型的列。 因此,添加了额外的 [Summary!2!ProductModelID!HIDE] 列,然后在 ORDER BY 子句中进行了指定。

USE AdventureWorks2012;  
GO  
SELECT  1 as Tag,  
        0 as Parent,  
        ProductModelID     as [ProductModel!1!ProdModelID],  
        Name               as [ProductModel!1!Name],  
        NULL               as [Summary!2!ProductModelID!hide],  
        NULL               as [Summary!2!SummaryDescription]  
FROM    Production.ProductModel  
WHERE   CatalogDescription is not null  
UNION ALL  
SELECT  2 as Tag,  
        1 as Parent,  
        ProductModelID,  
        Name,  
        CatalogDescription.value('  
         declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
       (/PD:ProductDescription/@ProductModelID)[1]', 'int'),  
        CatalogDescription.query('  
         declare namespace pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";  
         /pd:ProductDescription/pd:Summary')  
FROM    Production.ProductModel  
WHERE   CatalogDescription is not null  
ORDER BY [ProductModel!1!ProdModelID],[Summary!2!ProductModelID!hide]  
FOR XML EXPLICIT  
go  

结果如下:

<ProductModel ProdModelID="19" Name="Mountain-100">  
  <Summary>  
    <SummaryDescription>  
      <pd:Summary xmlns:pd="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription" xmlns="">  
        <p1:p xmlns:p1="http://www.w3.org/1999/xhtml">Our top-of-the-line competition mountain bike. Performance-enhancing options include the innovative HL Frame, super-smooth front suspension, and traction for all terrain. </p1:p>  
      </pd:Summary>  
    </SummaryDescription>  
  </Summary>  
</ProductModel>  

另请参阅

将 EXPLICIT 模式与 FOR XML 配合使用