在nvarchar参数中查找包含定界词的行

问题描述 投票:0回答:1

我有一个从表中选择行偏移量的过程:

SELECT * --table contains ID and Name columns
FROM Names
ORDER BY ID
OFFSET @Start ROWS
FETCH NEXT @Length ROWS ONLY

除了@Start@Length参数之外,该过程还接收@SearchValue NVARCHAR(255)参数。 @SearchValue包含一串用空格分隔的值,例如'1 ik mi''Li 3'

我需要查询包含所有这些值的每条记录。因此,如果@SearchValue'1 ik mi',则它应返回包含所有三个值的所有记录:“ 1”,“ mi”和“ ik”。理解这一点的另一种方法是转到here,搜索表(尝试搜索00 eer 7),然后观察过滤后的结果。

我可以自由更改定界符或运行某些函数(对于我而言,在C#中可以格式化这些单词的数组)。

以下是我们失败的尝试(我们尚未尝试使用OFFSET来实现它:]]

Select ID, Name
From Names
Where Cast(ID as nvarchar(255)) in (Select value from string_split(@SearchValue, ' ')) AND 
Name in (Select value from string_split(@SearchValue, ' '))
SELECT ID, Name
FROM Names
WHERE @SearchValueLIKE '% ' + CAST(ID AS nvarchar(20)) + ' %' AND
@SearchValueLIKE '% ' + Name + ' %';

我们将Microsoft docs on string_split用于上述想法。

明天,我将尝试实现this solution,但是我想知道是否还有另一种方法可以防止这种情况发生。谢谢!

我有一个从表中选择行偏移量的过程:SELECT * --table包含ID和Name列,它们来自名称ORDER BY ID OFFSET @Start ROWS FETCH NEXT @Length ROWS除@ ...之外>]

sql sql-server stored-procedures
1个回答
0
投票

您最好的选择是使用全文索引。这就是他们的目标。

说过,您可以解决它。但是!您将要建立一个查询来做到这一点。您可以使用C#构建查询并在数据库中触发查询,也可以在数据库中构建查询。但是,您永远无法很好地优化查询,因为作为用户的用户可能会在您需要注意的搜索中触发各种垃圾,这显然是另一个讨论的主题。

© www.soinside.com 2019 - 2024. All rights reserved.