2011-03-24 1 views
3

À l'aide de SQL Server 2008, j'ai une requête qui émet un jeu de résultats en utilisant FOR XML. À l'heure actuelle, il s'agit d'un fragment non conforme.SQL Server FOR élément d'inclusion XML?

Comment est-ce que je peux emballer mon résultat XML dans un élément englobant et puis mettre une déclaration XML simple sur le dessus avec une seule référence de schéma/espace de nom pour rendre la sortie conforme?

Merci.

Répondre

4

Il est impossible d'avoir l'instruction de traitement xml dans un type de données XML dans SQL Server. Voir Limitations of the xml Data Type

Ce code

declare @XML xml = 
    '<?xml version="1.0"?> 
    <root>Value</root>' 

select @XML 

A la sortie

<root>Value</root> 

Vous pouvez construire le xml comme une chaîne avec l'instruction de traitement xml en place.

declare @XML xml = '<root>Value</root>' 
declare @XMLStr nvarchar(max) = '<?xml version="1.0"?>' 

set @XMLStr = @XMLStr + cast(@XML as nvarchar(max)) 

select @XMLStr 

Sortie

-------------------------------------------------------------------------- 
<?xml version="1.0"?><root>Value</root> 
+0

Le codeur C# me dit que je suis « perdre » la mémoire par l'utilisation de la chaîne doubler, mais si c'est la meilleure façon (et MSSQL gère la collection garbase string), je suppose il n'y a aucun problème. Merci! – Snowy

4

Ajouter "AVEC XMLNAMESPACES" au début et un RACINE() à la clause FOR XML:

WITH XMLNAMESPACES (DEFAULT 'http://namespace_uri_here') 
SELECT * 
FROM TABLE 
FOR XML AUTO, ROOT('TopLevel')