0

テーブルにxml列があります。xml をテーブルに挿入すると、xml 内のすべての記号が正常になります。しかし、Xml DML ステートメントを使用してノードを xml に挿入しようとしているときに、そのノードに「デルタ」などの記号がある場合、SqlServer はそれらを疑問符に変換しています。誰でもこの問題を解決する方法を提案できますか?

サンプルコードは次のとおりです。

-- 1. テーブルの作成
CREATE TABLE SAMPLE_XML (ID INT IDENTITY, Information xml);

-- 2. テーブルにデータを挿入するためのストアド プロシージャを作成します。

CREATE PROCEDURE [dbo].[SET_SAMPLEXML]
@Information xml
AS
BEGIN
    INSERT INTO SAMPLE_XML
           (Information)
     VALUES
           (@Information);
END

--3. execute stored procedure to insert data, delta symbol gets recognized
  EXEC  SET_SAMPLEXML
    @Information = N' <tr>                      
        <td>Δcardia info</td>            
    </tr>';

 --4 Now, insert one more node with delta symbol. SqlServer converts it into ? mark.
    UPDATE SAMPLE_XML
    SET Information.modify('insert (<td>Δinput</td>) as first into (tr)[1]') WHERE
    ID=1;

 --5 The result of the select statement of the table. Please observe, newly inserted td tag has the delta symbol converted into ? mark. 
    <tr>
<td>?input</td>
<td>Δcardia info</td>
</tr>
4

2 に答える 2

0

私は解決策を見つけました。sql:variable を使用するように xml.modify ステートメントを変更し、コンテンツを更新するためのストアド プロシージャを作成しました。正常に機能しました。もちろん、動的 SQL の場合、データの前に「N」を付ける必要があります。

CREATE PROCEDURE [dbo].[MODIFY_SAMPLEXML]

@情報xml

はじめに

UPDATE SAMPLE_XML SET Information.modify('insert sql:variable("@Information") as first into (tr)[1]') WHERE ID=1;

終わり

于 2013-10-09T12:11:36.643 に答える