Ejemplo: Especificar la directiva ELEMENT y la codificación de entidades
Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance
Este ejemplo muestra la diferencia entre las directivas ELEMENT y XML . La directiva ELEMENT crea entidades para los datos, pero la directiva XML no lo hace. Al elemento <Summary>
se le asigna el XML, <Summary>This is summary description</Summary>
, en la consulta.
Considere esta consulta:
USE AdventureWorks2022;
GO
SELECT 1 as Tag,
0 as Parent,
ProductModelID as [ProductModel!1!ProdModelID],
Name as [ProductModel!1!Name],
NULL as [Summary!2!SummaryDescription!ELEMENT]
FROM Production.ProductModel
WHERE ProductModelID=19
UNION ALL
SELECT 2 as Tag,
1 as Parent,
ProductModelID,
NULL,
'<Summary>This is summary description</Summary>'
FROM Production.ProductModel
WHERE ProductModelID = 19
FOR XML EXPLICIT;
Éste es el resultado. Se crea una entidad en el resultado para la descripción resumida.
<ProductModel ProdModelID="19" Name="Mountain-100">
<Summary>
<SummaryDescription><Summary>This is summary description</Summary></SummaryDescription>
</Summary>
</ProductModel>
Ahora, si se especifica la directiva XML en el nombre de columna Summary!2!SummaryDescription!XML
, en lugar de la directiva ELEMENT , se recibirá la descripción resumida sin la creación de entidades.
<ProductModel ProdModelID="19" Name="Mountain-100">
<Summary>
<SummaryDescription>
<Summary>This is summary description</Summary>
</SummaryDescription>
</Summary>
</ProductModel>
En lugar de asignar un valor XML estático, la consulta siguiente usa el método query()
del tipo xml para recuperar la descripción resumida del modelo de productos de la columna CatalogDescription de tipo xml . Como se sabe que el resultado es de tipo xml , no se aplica la creación de entidades.
SELECT 1 as Tag,
0 as Parent,
ProductModelID as [ProductModel!1!ProdModelID],
Name as [ProductModel!1!Name],
NULL as [Summary!2!SummaryDescription]
FROM Production.ProductModel
WHERE CatalogDescription is not null
UNION ALL
SELECT 2 as Tag,
1 as Parent,
ProductModelID,
Name,
(SELECT CatalogDescription.query('
declare namespace pd="http://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],Tag
FOR XML EXPLICIT;