У меня есть хранимая процедура с таким кодом.
ALTER PROCEDURE [dbo].[TESTTAGISSUE] @rule nvarchar(30), @filter nvarchar(max)
AS
BEGIN
DECLARE @Split char(1),
@X xml,
@insertedguid uniqueidentifier,
@insertedTime datetime
--
-- MYDBTITLE
--
IF(@rule='TESTGET')
BEGIN
SET @Split = ' '
SELECT @X = CONVERT(xml,' <root> <s>' + REPLACE(@filter,@Split,'</s> <s>') + '</s> </root> ')
;with cte1 as (
SELECT SearchItems = '%'+T.c.value('.','varchar(20)')+'%'
FROM @X.nodes('/root/s') T(c)
)
SELECT Top 1 MYDB.*
FROM MYDB WITH(NOLOCK)
INNER JOIN cte1 on MYDB.MYDBTitle like SearchItems
AND MYDB.Category IS NOT NULL
END
END
Цель кода - найти лучший результат с наибольшим количеством совпадений. Кажется, работает, но как это сделать без <или> в коде? Может быть, есть способ избежать или закодировать их?
пробный запуск:
EXEC @return_value = [dbo].[TESTTAGISSUE]
@rule = N'TESTGET',
@filter = N'solid pine'
SELECT 'Return Value' = @return_value
GO
Код отлично работает. Тем не менее, небольшая уникальная проблема / проблема взлома заключается в том, что мы используем какой-то настраиваемый инструмент для редактирования нашего SQL, и ему не нравятся <или> в коде. Мы собираемся исправить этот инструмент, но также задаемся вопросом об этом SQL и более чистом способе выполнения той же задачи?