我想将逗号分隔的字符串或类似字符串(无论什么是最好的)传递给存储过程,并将每个值应用于查询中的LIKE条件。
例如,如果我通过@terms =" avenue,park,road"然后,对于存储过程,它将生成以下行的查询:
SELECT *
FROM properties
WHERE
properties.Address LIKE @terms[0] OR
properties.Address LIKE @terms[1] OR
properties.Address LIKE @terms[2]
它需要与SQL Server 2008一起使用。任何人都可以告诉我最好的方法吗?感谢。
答案 0 :(得分:0)
我编写了一个分割字符串并将其作为表返回的函数。 然后,您可以像普通表一样加入它。
CREATE FUNCTION [dbo].[FN_SPLIT_TBL](@InExp varchar(8000), @Sep varchar(10))
RETURNS @Res TABLE(
Pos int,
Value varchar(max))
AS
BEGIN
WITH Pieces(pn, start, stop) AS (
SELECT 1, 1, CHARINDEX(@Sep, @InExp)
UNION ALL
SELECT pn + 1, stop + 1, CHARINDEX(@sep, @InExp, stop + 1)
FROM Pieces
WHERE stop > 0
)
INSERT INTO @Res
SELECT pn, SUBSTRING(@InExp, start, CASE WHEN stop > 0 THEN stop-start ELSE 512 END) AS s
FROM Pieces OPTION (MAXRECURSION 0);
RETURN;
END
用法
SELECT b.Field
FROM DBO.[FN_SPLIT_TBL]('TEST1,TEST2', ',') a
JOIN YOURTABLE b ON b.Field LIKE a.Value + '%'
返回
Pos Value
----------
1 TEST1
2 TEST2
应该做的伎俩