1

SQL Server 列でこの種の XML からファイル名を選択するにはどうすればよいですか?

  1. ファイル名は、VALUE高レベルのタグがFile このような名前のオブジェクトである場合にのみ属性にあります

    <Object NAME="File">
        <Parameter ID="1" NAME="Name" VALUE="\\mysvr\fiels\readme1.txt" />
    </Object>
    
  2. このサブ階層は、xml の任意のレベルに配置できます (以下の例を参照)。

  3. XML 列には 0 ~ N 個のファイル名を含めることができます。次のようなリストが必要です。

    id, filename
    --- ------------------------
     1  \\mysvr\fiels\readme1.txt
     1  \\mysvr\fiels\readme2.txt
     2  \\mysvr\fiels\readme3.txt
     2  \\mysvr\fiels\readme4.txt
    

XML コンテンツの例:

declare @t1 table
(   id int,
   x XML
)

insert into @t1 (id, x)
select 1,N'<root name="name" id="12">
<class1>
  <Object NAME="File">
              <Parameter ID="1" NAME="Name" VALUE="\\mysvr\fiels\readme1.txt" />
   </Object>
</class1>
<class1>
<subclass1>
<Object NAME="File">
              <Parameter ID="10" NAME="Name" VALUE="\\mysvr\fiels\readme2.txt" />
</Object>
<Object NAME="bitmap">
              <Parameter ID="11" NAME="my1" VALUE="bmp" />
</Object>
</subclass1>
</class1>
</root>'
union 
select 2,N'<root name="name" id="12">
<class1>
  <Object NAME="File">
              <Parameter ID="13" NAME="Name" VALUE="\\mysvr\fiels\readme3.txt" />
  </Object>
  <Object NAME="Font">
              <Parameter ID="22" NAME="Tahoma" VALUE="11" />
  </Object>
</class1>
<class1>
<subclass1>
  <Object NAME="File">
              <Parameter ID="14" NAME="Name" VALUE="\\mysvr\fiels\readme4.txt" />
  </Object>
</subclass1>
</class1>
</root>'
4

2 に答える 2

1

これを試して:

SELECT
    id,
    Filename = ObjPrm.value('@VALUE', 'varchar(100)')
FROM @t1
CROSS APPLY x.nodes('//Object[@NAME="File"]/Parameter') AS Tbl(ObjPrm)

次の出力が得られます。

ここに画像の説明を入力

于 2012-11-06T12:15:52.830 に答える
0

これを行うには、次のようにします。

表示する特定の詳細の文字列を定義します。

文字列が次のようになるように、idとNameを表示します。

String holder = "#id# -- #VALUE#"

次に、その文字列全体を検索して、2つの「#」記号の間にある値を探します。

それらを見つけたら、引用符内の値を検索して表示します。

于 2012-11-06T11:07:37.383 に答える