通常我在过滤器中使用XML变量,因为它们易于使用.
考虑tablea,其中column1是主键:
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
Run Code Online (Sandbox Code Playgroud)
它的工作原理是因为xml上的select返回两行,值为1和2.
现在我有一个tableb,带有复合主键column1和column2.所以:
declare @xml xml = '<row><column1>1</column1><column2>2</column2></row><row><column1>3</column1><column2>4</column2></row>'
Run Code Online (Sandbox Code Playgroud)
如何在xml上编写一个select以返回每一行和每列,例如:
column1 column2
1 2
3 4
Run Code Online (Sandbox Code Playgroud)
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)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3953 次 |
| 最近记录: |