SQL с тегами <>, создающими проблему. ищу альтернативный код / ​​способ - PullRequest
0 голосов
/ 17 июня 2020

У меня есть хранимая процедура с таким кодом.

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 и более чистом способе выполнения той же задачи?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...