Convertir un champs XML en chaîne de caractère NVARCHAR SQL Server




Comment convertir une colonne XML en NVARCHAR et éviter l’erreur « Implicit conversion from data type xml to varchar is not allowed. Use the CONVERT function to run this query. » ? Sous SQL Server 2008 ou SQL Server 2012 il est parfois intéressant de mixer des colonnes numériques avec des colonnes en XML pour une utilisation particulière. Pour faire une requête plus facilement il est pratique de convertir la colonne de type XML en NVARCHAR pour pouvoir la filtrer. 

Exemple sans conversion implicite du XML vers NVARCHAR

Par exemple avec un fichier XML d’exemple comme celui-ci :

DECLARE @mon_xml XML;
DECLARE @ma_chaine NVARCHAR(500);

SET @mon_xml =
'<entreprise>
<employes>Dupont</employes>
<employes>Durant</employes>
</entreprise>';
SET @ma_chaine  = @mon_xml ;
SELECT @ma_chaine;

Un erreur est retournée : Implicit conversion from data type xml to varchar is not allowed. Use the CONVERT function to run this query.

 

Convertir une colonne ou une variable de type XML vers le type NVARCHAR avec la fonction SQL Server CONVERT().

La solution est d’utiliser la fonction SQL Server CONVERT du type XML vers le type NVARCHAR(). Avec cette solution simple on peut effectuer une requête sur des données de type XML et même faire une recherche avec les fonctions de filtre comme LIKE par exemple.

DECLARE @mon_xml XML;
DECLARE @ma_chaine VARCHAR(500);

SET @mon_xml =
'<entreprise>
<employes>Dupont</employes>
<employes>Durant</employes>
</entreprise>';

SET @ma_chaine = CONVERT(VARCHAR(500), @mon_xml);

SELECT @ma_chaine as RESULTAT;