2010-12-13 11 views
4

私は、SQL Server上のvarchar(max)の列に格納されているいくつかのXMLデータを持っている2005年のデータは、フォーム(FQTN =完全修飾型名)である:選択XML

<?xml version="1.0" encoding="utf-16"?> 
<History xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <EntityViews> 
    <EntityProxy Type="FQTN" Key="386876" /> 
    <EntityProxy Type="FQTN" Key="387981" /> 
    <!-- etc. --> 
    </EntityViews> 
</History> 

Type、Keyを選択すると、この列のXMLデータから表形式の結果が1行で得られます。テーブルには、HistoryIdという名前のID主キーがあります。

+2

「XML」データ型と私たちXPathを作成する方が簡単ではないでしょうか? – Brad

+0

これはおそらく新しい展開ではありません。私はテーブルを作成しました。私たちが2005年、2000年、またはOracle上にいたかどうかは記憶していません。私はそれをどうやってやるべきかは別の質問です。 –

答えて

7
;with cteCastToXML as (
    select CAST(YourColumn as xml) as x 
     from YourTable 
) 
select h.ep.value('@Type','varchar(10)') as [Type], 
     h.ep.value('@Key', 'varchar(10)') as [Key] 
    from cteCastToXML 
     cross apply x.nodes('/History/EntityViews/EntityProxy') as h(ep) 
+0

ありがとう!私がしなければならなかった唯一の実質的な変更は、エンコーディングがutf-16なのでYourColumnをxmlとしてキャストする前にnvachar(max)としてキャストする必要があることでした。 –

0

私の推薦は2倍です。

  1. これはあなたが塔をやってされるものである場合には、XML列であることを、列を変更します。
  2. これを一度行う必要がある場合は、値を取得してXMLに変換して見てください。通常どおりに操作できます。 (変換方法はlinkです)。
関連する問題