Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
In questo esempio viene illustrato l'uso della direttiva HIDE . Questa direttiva è utile quando si desidera che la query restituisca un attributo per ordinare le righe nella tabella universale restituita dalla query, ma non si vuole che tale attributo nel documento XML risultante finale.
Questa query costruisce il codice XML seguente:
<ProductModel ProdModelID="19" Name="Mountain-100">
<Summary>
<SummaryDescription>
<Summary> element from XML stored in CatalogDescription column
</SummaryDescription>
</Summary>
</ProductModel>
Questa query genera il codice XML desiderato. La query identifica due gruppi di colonne con 1 e 2 come valori tag nei nomi delle colonne.
Questa query usa il metodo query() (tipo di dati xml) del tipo di dati xml per eseguire una query sulla colonna CatalogDescription di tipo xml per recuperare la descrizione di riepilogo. La query usa anche il metodo value() (tipo di dati xml) del tipo di dati xml per recuperare il valore ProductModelID dalla colonna CatalogDescription. Questo valore non è obbligatorio nel codice XML risultante, ma è necessario per ordinare il set di righe risultante. Pertanto, il nome della colonna, [Summary!2!ProductModelID!HIDE], include la direttiva HIDE . Se questa colonna non è inclusa nell'istruzione SELECT, sarà necessario ordinare il set di righe in base a [ProductModel!1!ProdModelID] e [Summary!2!SummaryDescription], che è di tipo xml, e non è possibile utilizzare la colonna di tipo xml in ORDER BY. Pertanto, la colonna aggiuntiva [Summary!2!ProductModelID!HIDE] viene aggiunta e viene quindi specificata nella clausola 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
Risultato:
<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>