Vérifiez la string dans l'instruction select à l'aide de SQL Server 2008

Ici, je dois vérifier la string qui est au format ' a,c,e '. Cette situation s'est produite lorsque l'user sélectionne plusieurs options à partir de la checkbox et dans la requête, j'ai besoin de le vérifier avec la colonne actuelle.

Exemple :

Chaîne indiquée:

 'a,c,e' 

Besoin de vérifier la string donnée chaque mot est présent dans la colonne columnA ou non:

 columnA columnB ------------------- a 1 b 2 c 3 d 4 e 5 f 6 g 7 h 8 

Si a,c,e présent dans la colonne columnA il doit récupérer avec la columnB :

Résultat attendu :

 columnA columnB ------------------ a 1 c 3 e 5 

Mon essai:

 select columnA,columnB from test where columnA ='a' or columnA = 'c' or columnA = 'e' 

Je ne me sens pas! C'est la façon optimale de le faire. Et ce n'est également pas bon pour la requête dynamic où les valeurs de string deviennent des changements simultanément.

Essayez le code ci-dessous:

 DECLARE @COMMASEPSTR NVARCHAR(200), @SQL nvarchar(max), @STR nvarchar(100) = 'a,b,c' SET @COMMASEPSTR= '''' + REPLACE(@STR,',',''',''') + '''' SET @SQL = 'select columnA,columnB from test where columnA IN ( ' + @COMMASEPSTR + ')' EXEC sp_executesql @SQL 

Dites-moi si je me trompe quelque part.

Je ne suis pas sûr du format de votre string d'input dynamic ou du format de columnA mais vous pouvez essayer ceci:

 select columnA,columnB from test where CHARINDEX(columnA, 'a,c,e')>0 

Vous pouvez utiliser la syntaxe IN:

 select columnA,columnB from test where columnA IN ('a','b','c') 

essayez de rendre votre vie plus facile, mettez votre string d'input avant la colonne dans l'instruction select.

 declare @temp table ( ColumnA NVARCHAR(MAX), ColumnB NVARCHAR(MAX) ) insert into @temp select 'a','1' union all select 'b','2' union all select 'c','3' union all select 'd','4' union all select 'e','5' union all select 'f','6' union all select 'g','7' DECLARE @input NVARCHAR(MAX) SET @input= 'a,d,c' select * from @temp where @input like '%' + ColumnA +'%'