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)

どうすればこれを達成できますか?

データベースはSQLServer2008です

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 に答える