Поделиться через


Имена столбцов с путем, заданным как data()

Если путь, указанный в качестве имени столбца, — data(), значение рассматривается как атомарное значение в созданном XML. Пробел добавляется в XML, если следующий элемент в процессе сериализации также является атомарным значением. Это полезно при создании типизированных элементов списка и значений атрибутов. Следующий запрос извлекает идентификатор модели продукта, имя и список продуктов в этой модели продукта.

USE AdventureWorks2012;  
GO  
SELECT ProductModelID       AS "@ProductModelID",  
       Name                 AS "@ProductModelName",  
      (SELECT ProductID AS "data()"  
       FROM   Production.Product  
       WHERE  Production.Product.ProductModelID =   
              Production.ProductModel.ProductModelID  
      FOR XML PATH (''))    AS "@ProductIDs"  
FROM  Production.ProductModel  
WHERE ProductModelID= 7   
FOR XML PATH('ProductModelData');  

Вложенный SELECT получает список идентификаторов продуктов. Он указывает "data()" в качестве имени столбца для идентификаторов продуктов. Так как режим PATH задает пустую строку для имени элемента строки, не создается элемент строки. Вместо этого значения возвращаются как назначенные атрибуту <ProductModelData> ProductIDs элемента строки родительского SELECT. Результат:

<ProductModelData ProductModelID="7"

ProductModelName="HL Touring Frame"

ProductIDs="885 887 888 889 890 891 892 893" />

См. также

Использование режима PATH совместно с FOR XML