Похоже, что использование LIKE в условиях с подстановочными знаками и переменной внутри динамического sql не работает, хотя и не вызывает ошибки. Вот пример.
Столбец с именем code имеет такие значения, как A0B01C02, A0B02C2D05, A0B02C2D05 и т. Д., И я пытаюсь сопоставить строки, содержащие подмножество, например «B1». Когда я это делаю, он работает и возвращает ожидаемые результаты.
set @sql='select * from table where code like ''%B01%'''
exec sp_executesql @sql
Если я жестко закодирую значение переменной set @ code = 'B01' и изменю оператор sql для объединения кавычек и подстановочных знаков:
set @sql='select * from table where code like ' +''''+ '%'+@code + '%' + ''''
exec sp_executesql @sql
Это возвращает ожидаемые результаты, но мне пришлось жестко закодировать переменную. Однако, когда мне нужно найти соответствие, используя переменную для B01 и переменная установлена с помощью оператора select, я не получаю никаких результатов. Я определяю nvarchar следующим образом:
set @code=(select top 1 code from anotherTable where USERID=@PersonId)
Однако я подтвердил, что приведенный выше оператор select возвращает ожидаемый код. Ошибки нет, но запрос «выполнен успешно». Мне что-то не хватает в синтаксисе предложения where?