我有一个从表中选择行偏移量的过程:
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除@ ...之外>]
您最好的选择是使用全文索引。这就是他们的目标。
说过,您可以解决它。但是!您将要建立一个查询来做到这一点。您可以使用C#构建查询并在数据库中触发查询,也可以在数据库中构建查询。但是,您永远无法很好地优化查询,因为作为用户的用户可能会在您需要注意的搜索中触发各种垃圾,这显然是另一个讨论的主题。