UDF:
ALTER FUNCTION [dbo].[udf_GetActivity]
(@XWILDCARDSEARCH NVARCHAR(100))
RETURNS
@TABLE TABLE (SRCCODE NVARCHAR(10),
DESCRPTN NVARCHAR(100),
PARENTTRANID NVARCHAR(10),
INVOICE NVARCHAR(50),
PERIOD NVARCHAR(7),
REF NVARCHAR(20),
CURRCODE NVARCHAR(10),
DEPARTMENT NVARCHAR(10),
INVCDATE DATETIME,
RECPTTYPEID NVARCHAR(20),
RECPTNO NVARCHAR(20),
ADDLDESC NVARCHAR(1000)
)
AS
BEGIN
INSERT INTO @TABLE
SELECT
A.SOURCECODE, A.DESCRIPTION,
B.PARENTTRANSID, B.INVOICE,
A.PERIOD, A.REF, B.CURRENCYCODE, ...
A.ADDITIONALDESCRIPTION
FROM
TABLEA A
JOIN
TABLEB B ON A.SOURCECODE = B.SOURCECODE
RETURN
END
@XWILDCARDSEARCH
的参数可以是任何字符串('09', 'rent', 'invc93', '2'
)。
使用以下列按参数筛选表结果。正在寻找类似的东西
WHERE A.DESCRIPTION LIKE '%' + @XWILDCARDSEARCH+ '%'
OR A.REF LIKE '%' + @XWILDCARDSEARCH+ '%'
OR B.INVOICE LIKE '%' + @XWILDCARDSEARCH+ '%'
- 描述
- 发票
- 参考
这很好,但速度很慢,所以想知道有没有其他方法可以以最好的方式完成这项工作?
不幸的是,如果搜索到的字符串以通配符开头(这就是您的情况),则无法使用索引来加快查询速度。
您可以使用全文搜索(最好是在数据库副本上),这种方法需要创建全文索引,如果您需要在多列上搜索,这是一种非常适合的解决方案
A LIKE query against millions of rows of text data can take minutes to return; whereas a full-text query can take only seconds or less against the same data, depending on the number of rows that are returned.
https://learn.microsoft.com/en-us/sql/relational-databases/search/full-text-search?view=sql-服务器-ver15
或者,您可以使用其他技术,如ElasticSearch
https://www.elastic.co/