1

挿入ストアド プロシージャで中国語を読み取ろうとしています。XML 読み取り SP は、一括入力パラメータを XML として取得し、"sp_xml_preparedocument" を使用してそれを解析/読み取り、テーブルに挿入します。ここでの問題は、中国語を「???」と読んでいることです。文字。

以下はxml読み取りSPです:

    DECLARE @idoc int;
    DECLARE @cnt int = 0;           

    EXEC sp_xml_preparedocument @idoc OUTPUT, '<?xml version="1.0" encoding="ISO-8859-1"?><DocumentElement><Specifications><ID>1</ID><Name>维&lt;/Name><Value>123</Value></Specifications><Specifications><ID>2</ID><Name>重量</Name><Value>123123</Value></Specifications></DocumentElement>'

    SELECT @cnt = COUNT(*)
    SELECT  ID, Name, Value
    FROM OPENXML (@idoc, '/DocumentElement/Specifications', 2)
    WITH (ID int, Name nvarchar(MAX), Value nvarchar(MAX))

出力は次のとおりです。

   ID    Name     Value

   1     ?    123

   2     ??   123123

名前が漢字の代わりに ?? として表示されていることがわかります。XML エンコーディングを UTF-8 と UTF-16 に変更しようとしましたが、うまくいきませんでした。

4

3 に答える 3

2

ドキュメントを ISO-8859-1 ではなく UTF-16 で表示できますか? 以下はうまくいきます:

   DECLARE @xml XML = N'<?xml version="1.0" ?><DocumentElement><Specifications><ID>1</ID><Name>维&lt;/Name><Value>123</Value></Specifications><Specifications><ID>2</ID><Name>重量</Name><Value>123123</Value></Specifications></DocumentElement>'

    SELECT  x.value(N'ID[1]', 'int') as ID,
      x.value(N'Name[1]', 'nvarchar(max)') as Name,
      x.value(N'Value[1]', 'nvarchar(max)') as Value
    FROM @xml.nodes (N'/DocumentElement/Specifications') T(x);

SqlFiddleを参照してください。

于 2013-03-29T09:54:45.087 に答える
1

変数を XML として宣言すると、問題が解決しました。

"Käufer garantierte" の文字 ä を解析中に、sp_xml_preparedocument の呼び出しに失敗しました。エンコーディングを UTF-16 に設定すると、「現在のエンコーディングから指定されたエンコーディングへの切り替えはサポートされていません」というエラーがスローされました。XML 文字列を C# コードからパラメーターとして NVARCHAR(MAX) として渡していました。

于 2015-12-31T09:41:55.720 に答える
1

まず、XML を を使用して Unicode 文字列として定義する必要がありますN''

encoding次に、SQL Server の XML 処理では、エラーが発生するため属性が許可されません。

メッセージ 6602、レベル 16、状態 2、プロシージャ sp_xml_preparedocument、行 1 エラーの説明は、「現在のエンコーディングから指定されたエンコーディングへの切り替えはサポートされていません。」です。

引数は、SQL Server が NVARCHAR に UCS-2 を使用しているため、他のエンコーディングは存在できないということだと思います。

両方のエラーを修正すると、望ましい結果が得られます。

于 2013-03-29T10:00:57.140 に答える