使用split加入where子句中的列

时间:2012-11-16 10:45:20

标签: sql sql-server sql-server-2008

我的存储过程接受一个值为

的参数
Declare @Temp VarChar(Max)
Set @Temp = 'S1CW3733|1050105000224,S1CW4923|1050105000009'

值在哪里

Column1|Column2,Column1|Column2,Column1|Column2,

我想在SQL查询中应用相同的内容,如

Select * 
From ATMStatus 
Where ATM + '|' + Fault IN (@Temp)

我怎样才能做到这一点?

数据库是SQL Server 2008

1 个答案:

答案 0 :(得分:2)

对于小型表,您可以使用表扫描解决方案,假设ATM和Fault永远不能包含逗号(,)或管道(|):

Select *
  From ATMStatus
 Where ',' + @Temp + ',' LIKE '%,' + ATM + '|' + Fault + ',%';

对于大型表,您需要使用拆分函数将变量转换为多行的2列表,然后使用类似的表:

Select a.*
  From ATMStatus a
  join dbo.SplitVarTo2ColumnTable(@Temp) b
       on b.Column1 = a.ATM and b.Column2 = a.Fault;