You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于多LIKE语句的文本搜索存储过程(不使用全文搜索)

解决方案:动态生成多条件LIKE查询的存储过程

这里是适配SQL Server场景的存储过程实现,它能接收逗号分隔的属性列表,自动拆分后生成对应的AND LIKE查询逻辑,完全匹配你的需求:

CREATE PROCEDURE SearchFor
    @Attributes NVARCHAR(MAX)
AS
BEGIN
    SET NOCOUNT ON;

    -- 处理空参数:如果没传入有效属性,直接返回所有商品
    IF @Attributes IS NULL OR LTRIM(RTRIM(@Attributes)) = ''
    BEGIN
        SELECT * FROM GoodInfo;
        RETURN;
    END

    -- 初始化动态SQL框架
    DECLARE @DynamicSQL NVARCHAR(MAX) = 'SELECT * FROM GoodInfo WHERE 1=1';
    DECLARE @Attribute NVARCHAR(255);

    -- 拆分属性列表并过滤空项(比如用户输入`Watch,,LED Screen`的情况)
    DECLARE AttributeCursor CURSOR FOR
        SELECT LTRIM(RTRIM(value)) AS Attribute
        FROM STRING_SPLIT(@Attributes, ',')
        WHERE LTRIM(RTRIM(value)) <> '';

    OPEN AttributeCursor;
    FETCH NEXT FROM AttributeCursor INTO @Attribute;

    -- 遍历每个属性,拼接LIKE条件
    WHILE @@FETCH_STATUS = 0
    BEGIN
        -- 转义单引号避免SQL语法错误和注入风险
        SET @DynamicSQL = @DynamicSQL + ' AND Description LIKE ''%' + REPLACE(@Attribute, '''', '''''') + '%''';
        
        FETCH NEXT FROM AttributeCursor INTO @Attribute;
    END

    CLOSE AttributeCursor;
    DEALLOCATE AttributeCursor;

    -- 执行生成的动态SQL
    EXEC sp_executesql @DynamicSQL;
END

关键细节说明

  • 空参数防护:如果传入的属性列表为空或全是空格,直接返回所有商品,避免生成无效SQL。
  • 字符串拆分:使用STRING_SPLIT函数(SQL Server 2016及以上版本支持)快速拆分逗号分隔字符串,同时过滤掉空的属性项。
  • SQL注入防护:通过REPLACE转义属性中的单引号,避免恶意输入破坏SQL语法或注入攻击。
  • 动态逻辑生成:用游标遍历每个属性,自动拼接AND Description LIKE '%属性值%'的条件,不管传入多少个属性都能适配。

使用示例

调用方式完全符合你的要求:

EXEC SearchFor 'Watch,Water Proof,LED Screen,Digital';

这个存储过程会自动生成并执行如下SQL:

SELECT * FROM GoodInfo WHERE 1=1 
AND Description LIKE '%Watch%' 
AND Description LIKE '%Water Proof%' 
AND Description LIKE '%LED Screen%' 
AND Description LIKE '%Digital%'

兼容旧版本SQL Server(可选)

如果你的SQL Server版本低于2016(不支持STRING_SPLIT),可以替换拆分逻辑为自定义表值函数,比如用循环拆分字符串的方式,再替换游标中的查询部分即可。

内容的提问来源于stack exchange,提问作者Muhammad Musavi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:46:47