1

我的存储过程接受具有以下值的参数

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

4

1 回答 1

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;
于 2012-11-16T10:48:15.293 回答