Похоже, что использование 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?