动态 SQL 搜索改进

Dynamic SQL search improvement

我有这个 SQL 查询,我正在使用它在数据库中进行动态搜索:

SELECT [Name],[Vendor]
FROM OrderedApps
Where Name like '%' + 'Microsoft Visio' + '%' OR [Vendor] like '%' + 'Microsoft Visio' + '%'

在数据库中我有例如:

Name         Vendor
Visio Viewer Microsoft
Office Visio Microsoft
Office test  Microsoft

如果我提供输入 Microsoft Visio

我想列出来

Name         Vendor
Visio Viewer Microsoft
Office Visio Microsoft

如何改进我的 SQL 查询以实现此目的?我进行了谷歌搜索,但还没有找到我想要做的事情。

将您的参数作为 table 值参数,作为单词列表传递。

或在 SQL 中拆分:

DECLARE @words TABLE (word varchar(100) PRIMARY KEY);
INSERT @words (word)
SELECT value
FROM STRING_SPLIT(@myparam, ' ');

然后您可以反转您的列进行搜索,并像这样加入它:

SELECT [Name],[Vendor]
FROM OrderedApps oa
WHERE EXISTS (
    SELECT 1
    FROM @words w
    LEFT JOIN (VALUES
        (oa.Name),
        (oa.Vendor)
    ) v (col)
        ON v.col LIKE '%' + w.word + '%'
    HAVING COUNT(CASE WHEN v.col IS NULL THEN 1 END) = 0  -- this line ensures that every word matches at least once
);

如果您只想要单词列表中的任何匹配项,则更容易:

WHERE EXISTS (
    SELECT 1
    FROM @words w
    JOIN (VALUES
        (oa.Name),
        (oa.Vendor)
    ) v (col)
        ON v.col LIKE '%' + w.word + '%'
);