将逗号分隔的字符串传递给存储过程并应用LIKE查询每个值?

时间:2016-02-25 21:19:39

标签: c# sql sql-server sql-server-2008 stored-procedures

我想将逗号分隔的字符串或类似字符串(无论什么是最好的)传递给存储过程,并将每个值应用于查询中的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一起使用。任何人都可以告诉我最好的方法吗?感谢。

1 个答案:

答案 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

应该做的伎俩