2011-12-01 7 views
24

基本的にはXMLという名前の列があり、その型はTEXTです。これは他の理由で変更することはできませんが、私はXMLにどのようにキャストできるか不思議でした。これを実行しようとしたときのエンコーディングSQLサーバーでTEXTをXMLにキャストできません

を切り替えることができませんでしライン1、文字39、:それは私にエラー

XML解析を与える

。とにかくそれが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 

答えて

45

あなたの問題にencoding="utf-16"を交換することです、あなたが探しているものを達成するためにネストされた2つのCASTをしなければならない。

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

まず、あなたはにキャストする必要があります210(またはNVARCHAR(MAX))、その結果を使用するには、その結果をXMLにキャストする必要があります。

ヒント: NTEXTが問題 CAST(CAST (XML AS NTEXT) AS XML)を解決して

+0

このメソッドを試してみると「不正なxml文字」エラーが発生します。 SQL Server 2008 R2。何か案は? – Azimuth

+0

@Azimuth:新しい質問のように聞こえます。サンプルXMLを投稿してください! –

+0

@marc_s私の問題は、私のXML文字列のアクセント文字であると思う... – Azimuth

-1

はあなたがCONVERT代わりのCASTを試してみましたが?

SELECT CONVERT(XML, @xml).value('(/Record/UserGuid)[1]', 'NVARCHAR(max)') 
from tbl_Module_RequestForms_Items 

また、このページの「xmlスタイル」セクションもご覧ください。これは、XMLを変換するときに、あなたが持っているいくつかのオプションが含まれています

http://msdn.microsoft.com/en-us/library/ms187928.aspx

+0

入力が基本的にUnicodeですが、格納されているデータ型が非Unicodeのため、使用可能な4つのスタイルはありません –

+0

ええ、あなたはそれを釘付けにしました。あなたのための1つのupvote ... – JohnD

25

あなたはencoding="utf-8"または''(blank)encoding="utf-16"を交換してから操作を実行する必要があります。

a。 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"を変換します。あなたはencoding="utf-16"でXMLを持っていますが、あなたのコラムは......

あなたはどちらか NTEXTに変更することはできませんと仮定すると、非Unicode列です: ''(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 
+0

私は両方の権利をマークすることができたら、あなたとMarc_sはどちらも素晴らしい方法を持っていた。私はあなたのことを賞賛した。再度、感謝します! –

+0

こんにちは@thesandman、サポートありがとう、私もあなたに投票しました。私はいくつかの点であなたに正しく答えることを最善に試みました。御時間ありがとうございます。 –

+4

キャストは私にとってはうまくいきませんでしたが、明示的な 'encoding =" UTF-8 "をここで示唆したように削除することは、そのトリックを行いました。 – dakab

2

は、XML変数をキャスト.....これらの「その他の理由」を削除し、あなたが本当にXMLとしてそれを使用する必要がある場合XMLデータ型にこれを変換します。

+0

これは過小評価です。 – DarkKnight

関連する問題