0
目標:返回基於搜索3個不同列的結果,每個列都有自己的搜索字符串值,並且如果可能,請按RANK
排序。SQL Server使用FREETEXTABLE搜索多個列
規則:
- 允許被搜索任何列
- 結果必須包含在各自的列中的所有搜索字符串,除非
null
傳遞 - IF 所有搜索字符串爲
null
,返回空結果
當前存儲過程:
我能拿出這麼多的研究之後才能通過上述遵守規則。
ALTER PROCEDURE [Application].[usp_Institution_Search]
@RowCount INT = 100,
@Name NVARCHAR(255),
@City NVARCHAR(255),
@Country NVARCHAR(255)
AS
BEGIN
SET NOCOUNT ON;
IF ISNULL(@Name, '') = '' SET @Name = '""'
IF ISNULL(@City, '') = '' SET @City = '""'
IF ISNULL(@Country, '') = '' SET @Country = '""'
SELECT TOP (@RowCount)
[i].*
FROM
[dbo].[Institutions] [i]
WHERE
((NULLIF(@Name, '""') IS NULL OR FREETEXT([i].[InstitutionName], @Name))
AND (NULLIF(@City, '""') IS NULL OR FREETEXT([i].[City], @City))
AND (NULLIF(@Country, '""') IS NULL OR FREETEXT([i].[Country], @Country))
AND
(
NULLIF(@Name, '""') IS NOT NULL
OR NULLIF(@City, '""') IS NOT NULL
OR NULLIF(@Country, '""') IS NOT NULL)
)
END
問題:我正要下令由InstitutionName
結果,但後來我想到了用RANK
代替。經過更多的研究,我發現最好使用FREETEXTTABLE
。在這一點上,我不確定如何最好地處理我的情況,因爲大多數結果總是談論在多列中搜索一個字符串。
我不完全確定這是如何工作的,但我想我想要搜索所有列的最高組合RANK
。
如果這是可能的,請給我一些例子。