无法在SQL Server中将TEXT转换为XML

the*_*man 32 xml sql-server sql-server-2005

基本上我有一个名为XMLtype 的列TEXT; 这不能因为其他原因而改变,但我想知道如何将其转换为XML.

它给了我一个错误

XML解析:第1行,第39个字符,无法切换编码

当试图这样做.是否还有它仍然将它格式化为XML?我真的陷入了困境.

列内数据:

<?xml version="1.0" encoding="utf-16"?>
<Record>
     <UserGuid>c624a356-9f18-403c-b404-790e79034c7d</UserGuid>
</Record>
Run Code Online (Sandbox Code Playgroud)

这是演员SQL代码:

SELECT CAST(XML AS XML).value('(/Record/UserGuid)[1]', 'NVARCHAR(max)')
FROM tbl_Module_RequestForms_Items
Run Code Online (Sandbox Code Playgroud)

mar*_*c_s 52

你的问题是:你有一个XML encoding="utf-16",但你的列是一个非Unicode列......

假设您无法将其更改为NTEXT任何一个,您必须执行两个嵌套CAST来实现您正在寻找的内容:

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

首先,你需要强制转换为NTEXT(或NVARCHAR(MAX)),然后你必须将结果转换为XML,然后才能使用它.

提示:删除那些"其他原因"并将其转换为XML数据类型,如果您确实需要将其用作XML .....


Eli*_*ain 35

您应该替换encoding="utf-16"encoding="utf-8"''(blank)然后执行您的操作.

一个.转换encoding="utf-16"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
Run Code Online (Sandbox Code Playgroud)

湾 替换encoding="utf-16"''(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
Run Code Online (Sandbox Code Playgroud)

  • 来回转换对我来说不起作用,但删除显式的`encoding ="UTF-8"`就像这里建议的那样. (6认同)