SQL Server 2008 R2:准备动态WILDCARD

时间:2015-10-28 05:47:42

标签: sql-server sql-server-2008-r2 wildcard

我有以下表格Test_01,其中有两列ColaColb

我有一种情况是我需要使用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来准备LIKE OR条件。

如何准备动态WILDCARD,如下所示?

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

1 个答案:

答案 0 :(得分:2)

我使用表变量来解析变量@a值并将它们存储为行。 使用主表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+'%'