通常我在过滤器中使用 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
它之所以有效,是因为对 xml 的选择返回两行,值为 1 和 2。
现在我有一个tableb,有一个复合主键column1 和column2。所以:
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