基本的に、XML
という名前のTEXT
という名前の列があります。これは他の理由で変更することはできませんが、どうすればXMLにキャストできるのかと思っていました。
エラーが出ます
XML解析:行1、文字39、エンコードを切り替えることができません
これをしようとするとき。それをXMLにフォーマットするためにまだ周りにありますか?私はこの時点で本当に行き詰まっています。
列内のデータ:
<?xml version="1.0" encoding="utf-16"?>
<Record>
<UserGuid>c624a356-9f18-403c-b404-790e79034c7d</UserGuid>
</Record>
キャストSQLコードは次のとおりです。
SELECT CAST(XML AS XML).value('(/Record/UserGuid)[1]', 'NVARCHAR(max)')
FROM tbl_Module_RequestForms_Items
あなたの問題は、XMLに_encoding="utf-16"
_がありますが、列が非Unicode列である......
NTEXT
にも変更できないと仮定すると、ネストされた2つのCAST
を実行して、探しているものを実現する必要があります。
_SELECT
CAST(CAST(XML AS NTEXT) AS XML).value('(/Record/UserGuid)[1]', 'NVARCHAR(max)')
FROM
tbl_Module_RequestForms_Items
_
まず、NTEXT
(またはNVARCHAR(MAX)
)にキャストする必要があります。次に、その結果を使用する前にXML
にキャストする必要があります。
Tip:これらの「その他の理由」を削除し、XMLとして使用する必要がある場合は、これをXML
データ型に変換します.....
_encoding="utf-16"
_を_encoding="utf-8"
_または''(blank)
に置き換えてから、操作を実行する必要があります。
a。 _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
_
b。 _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
_
XML変数をNTEXTとしてキャストすると、CAST(CAST (XML AS NTEXT) AS XML)
の問題が解決します。
Encoding = "utf-8"をencoding = "utf-16"に置き換えるとうまくいきました。 :)