2015-10-28 105 views
1

我有下列表Test_01有两列,即ColaColbSQL Server 2008 R2:准备动态WILDCARD

我有一种情况是我需要使用LIKEIN多个值。

SELECT * FROM Test_01; 

Cola Colb 
------------ 
1  A 
11  B 
22  C 

DECLARE @a VARCHAR(max) = 'A,B,C' 
DECLARE @sql VARCHAR(max) = '' 

我的坏尝试:这并不适用

SET @SQL = 'SELECT * from test_01 
     WHERE Colb LIKE IN (''%'+REPLACE(@a,',','%'',''%')+'%'')'; 
PRINT(@sql); 

最后我知道我需要通过参考THIS准备LIKEOR条件。

如何准备如下图所示的动态WILDCARD?

SELECT * FROM Test_01 
WHERE 
Colb LIKE '%A%' OR 
Colb LIKE '%B%' OR 
Colb LIKE '%C%' ; 

回答

2

我正在使用表变量来分析变量@a值并将它们存储为行。 使用like查看主表test_01和表变量之间的内联接以查看是否有匹配的记录。

DECLARE @a VARCHAR(max) = 'A,B,C'; 

declare @tablevariable table 
(
colb varchar(20) 
); 

INSERT INTO @tablevariable 
SELECT Split.a.value('.', 'VARCHAR(100)') AS String 
FROM (SELECT 
     CAST ('<M>' + REPLACE(@a, ',', '</M><M>') + '</M>' AS XML) AS String 
    ) AS A CROSS APPLY String.nodes ('/M') AS Split(a); 


select tb1.* from test_01 tb1 inner join @tablevariable tb2 
on tb1.colb like '%'+tb2.colb+'%' 
+1

Plus1非常感谢你。 – MAK