Ma procédure stockée accepte un paramètre avec des valeurs comme
Declare @Temp VarChar(Max) Set @Temp = 'S1CW3733|1050105000224,S1CW4923|1050105000009'
Où les valeurs sont comme
Column1|Column2,Column1|Column2,Column1|Column2,
Je veux appliquer même dans la requête SQL comme
Select * From ATMStatus Where ATM + '|' + Fault IN (@Temp)
Comment puis-je atteindre cet objective?
La database est SQL Server 2008
Pour les petites tables, vous pouvez utiliser la solution de numérisation de table, en supposant que ATM et Fault ne contiennent jamais de virgule ( ,
) ou de pipe ( |
):
Select * From ATMStatus Where ',' + @Temp + ',' LIKE '%,' + ATM + '|' + Fault + ',%';
Pour les grandes tables, vous devez utiliser une fonction de fractionnement pour transformer la variable en une table à deux rangées et à deux colonnes, qui sera utilisée comme:
Select a.* From ATMStatus a join dbo.SplitVarTo2ColumnTable(@Temp) b on b.Column1 = a.ATM and b.Column2 = a.Fault;