Я бы порекомендовал использовать стороннюю библиотеку для поиска. Хорошая поисковая система - это гораздо больше, чем поиск строк.
При этом я понимаю, что вам все еще может быть полезно реализовать ваш текстовый искатель, как вы указали. Вы можете использовать функцию, чтобы подсчитать, сколько раз встречается подстрока.
Я изменил пользовательскую функцию разделения из Энди Робинсона T-SQL разделенная строка
CREATE FUNCTION dbo.countOfSubString (@source VARCHAR(MAX), @stringToFind VARCHAR(MAX))
RETURNS INT
AS
BEGIN
DECLARE @name NVARCHAR(255)
DECLARE @pos INT
DECLARE @count INT = 0
WHILE CHARINDEX(@stringToFind, @source) > 0
BEGIN
SELECT @pos = CHARINDEX(@stringToFind, @source)
SELECT @name = SUBSTRING(@source, 1, @pos-1)
SET @count = @count + 1
SELECT @source = SUBSTRING(@source, @pos+1, LEN(@source)-@pos)
END
RETURN @count
END
Затем используйте это, чтобы найти страницу с наибольшим количеством совпадений:
SELECT TOP 1 page_id
, page_text
FROM pages
ORDER BY dbo.countOfSubString(page_text, search_text) DESC