web-dev-qa-db-fra.com

Impossible de convertir TEXT en XML dans SQL Server

Fondamentalement, j'ai une colonne nommée XML qui est de type TEXT; cela ne peut pas être changé pour une autre raison, mais je me demandais comment je pouvais le convertir en XML.

Ça me donne une erreur

Analyse XML: ligne 1, caractère 39, impossible de changer l'encodage

en essayant de le faire. Existe-t-il de toute façon autour de lui pour le mettre au format XML? Je suis vraiment coincé à ce stade.

Données dans la colonne:

<?xml version="1.0" encoding="utf-16"?>
<Record>
     <UserGuid>c624a356-9f18-403c-b404-790e79034c7d</UserGuid>
</Record>

Voici le code SQL cast:

SELECT CAST(XML AS XML).value('(/Record/UserGuid)[1]', 'NVARCHAR(max)')
FROM tbl_Module_RequestForms_Items
32
the sandman

Votre problème est: vous avez XML avec un encoding="utf-16", Mais votre colonne est une colonne non Unicode ......

En supposant que vous ne pouvez pas non plus le changer en NTEXT, vous devez faire deux CAST imbriqués pour réaliser ce que vous ' re cherche:

SELECT 
    CAST(CAST(XML AS NTEXT) AS XML).value('(/Record/UserGuid)[1]', 'NVARCHAR(max)')
FROM 
    tbl_Module_RequestForms_Items

Tout d'abord, vous devez convertir en NTEXT (ou NVARCHAR(MAX)), puis vous devez convertir ce résultat en XML, avant de pouvoir l'utiliser.

Astuce: supprimez ces "autres raisons" et convertissez-les en XML type de données si vous avez vraiment besoin de l'utiliser en XML .... .

52
marc_s

Vous devez remplacer encoding="utf-16" Par encoding="utf-8" Ou ''(blank) puis effectuer votre opération.

une. Conversion de encoding="utf-16" En encoding="utf-8"

SELECT 
  CAST(
    REPLACE(CAST([xml] AS VARCHAR(MAX)), 'encoding="utf-16"', 'encoding="utf-8"')
  AS XML).value('(/Record//UserGuid/node())[1]', 'NVARCHAR(max)') as UserGuid
from tbl_Module_RequestForms_Items

b. Remplacement de encoding="utf-16" Par ''(blank)

SELECT 
  CAST(
    REPLACE(CAST([xml] AS VARCHAR(MAX)), 'encoding="utf-16"', '')
  AS XML).value('(/Record//UserGuid/node())[1]', 'NVARCHAR(max)') as UserGuid
from tbl_Module_RequestForms_Items
34
Elias Hossain

La conversion de la variable XML en NTEXT résout le problème CAST(CAST (XML AS NTEXT) AS XML).

3
Mick

Le remplacement de encoding = "utf-8" par encoding = "utf-16" a fonctionné. :)

0
M. Fawad Surosh