3

通常、フィルタでは XML 変数を使用します。これは、作業が簡単だからです。

column1 が主キーである tablea について考えてみます。

declare @xml xml = '<column1>1</column1><column1>2</column1>'

select *
from tablea
where
    column1 in (select x.i.value('.', 'bigint') from @xml.nodes('/column1') x(i)) or
    @xml is null

これは、xml に対する select が値 1 と 2 を持つ 2 つの行を返すために機能します。

これで、複合主キー column1 と column2 を持つ tableb ができました。そう:

declare @xml xml = '<row><column1>1</column1><column2>2</column2></row><row><column1>3</column1><column2>4</column2></row>'

次のように、xml に選択を記述して各行と列を返すにはどうすればよいですか。

column1 column2
1       2
3       4
4

1 に答える 1

5
declare @xml xml = '<row><column1 a="a">1</column1><column2>2</column2></row><row>' +
    '<column1>3</column1><column2>4</column2></row>'

select  col.value('data(column1[1])', 'int') as column1
,       col.value('data(column2[1])', 'int') as column2
from    @xml.nodes('/row') tbl(col)

SQLフィドルでの例。

于 2012-06-05T17:08:17.320 に答える