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
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 .... .
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
La conversion de la variable XML en NTEXT résout le problème CAST(CAST (XML AS NTEXT) AS XML)
.
Le remplacement de encoding = "utf-8" par encoding = "utf-16" a fonctionné. :)