2011-10-27 6 views
3

SQL Server 2008R2データベースにXMLコンテンツを格納する必要があります。 XMLは完全な本格的なファイルではなく、単純な要素だけを含んでいます。xmlをSQLデータベースに保存する

[xml]型の列を持つテーブルを作成しましたが、アイテムを内部に格納しようとするとエラーが発生します。

<AX_Wald gml:id="DESHPDHK0000u2xK"> 
    <gml:identifier codeSpace="http://www.adv-online.de/">urn:adv:oid:DESHPDHK0000u2xK</gml:identifier> 
    <vegetationsmerkmal>1300</vegetationsmerkmal> 
</AX_Wald> 

私はエラー(翻訳)を取得::私はこの(簡体字)のアイテムを保存しようとした場合例えば

Msg 9459 - XML parsing: line 1, character 35, undeclared prefix. 

私は、これは名前空間行方不明だと思いますが、私私のデータベースのすべての単一項目にすべての可能な名前空間を追加したくない。 XMLを変更せずにこれを解決する方法はありますか?後で元のXMLにアクセスして比較できるようにする必要があります。可能であれば、変更しないでください。

SQL Serverに名前空間を無視するよう指示する方法、またはテーブル全体に対してこれらの項目を含む列の名前空間を追加する方法がありますか?

答えて

1

:あなたは、SQL Serverがこの簡単なテストで文書を受け入れる確認することができますXML形式ではなくnvarcharとして保存するだけです。

あなたはまた、あなたのスキーム内でより寛容で柔軟である必要があり、あなたのXML type as a fragmentを指定することができます。

XMLフラグメントは、単一のトップレベル 要素が欠落しているXMLインスタンスです。

+2

フラグメントでも名前空間を定義する必要があります。フラグメントは複数の "ルート"要素を持つことができます。彼らはまだ整形式である必要があります。 – Yuck

+0

xmlの代わりにnvarchar(max)を使用します(テキストタイプは非推奨です)。ヒントありがとう! – Sam

0

問題はgmlです。

<AX_Wald xmlns:gml="http://someUri/" gml:id="DESHPDHK0000u2xK"> 

それ以外の場合は、有効なXMLドキュメントがありません。あなたは、単にこれらのXMLスニペットを考えることができます(例えばXMLクエリを実行)、SQL ServerのXML機能を必要とする/使用することがありますない限り

DECLARE @X XML = 
    N'<AX_Wald xmlns:gml="http://someUri/" gml:id="DESHPDHK0000u2xK" />'; 

SELECT @X; 
関連する問題