Вот строки в моей базе данных, которые я хочу получить:
Я хочу получить все 3 строки, выполнив один запрос, эти идентификаторы получены как параметры процедуры, иногда я могу получить 1 идентификатор, а иногда я могу получить 10 из них, в зависимости от того, что пользователи отправляют в базу данных.
Я написал что-то вроде этого:
SELECT *
FROM Products
WHERE CONVERT(NVARCHAR(MAX), ProductId) LIKE '%' + 'A9472294-CFDD-40AC-BC2D-00E39AF4A300, 9A817E40-E4B1-4487-A376-010DD6377E38, 078A3C75-C442-4D88-A1E0-0118B8706667' + '%'
SELECT *
FROM Products
WHERE 'A9472294-CFDD-40AC-BC2D-00E39AF4A300, 9A817E40-E4B1-4487-A376-010DD6377E38, 078A3C75-C442-4D88-A1E0-0118B8706667' LIKE '%' + CONVERT(NVARCHAR(MAX), ProductId) + '%'
Почему второй пример возвращает строки, как ожидалось, а первый пример не возвращает никаких строк?
Определение гласит: %or% finds any values that have "or" in any position
Как это на самом деле работает? Кто-нибудь может объяснить?
EDIT:
Я думал, что этот оператор LIKE должен использоваться в моем столбце как
Выбрать *
Из продуктов
Где ProductId как '%' + 'SomeStringId' + '%';
потому что оператор LIKE используется в предложении WHERE для поиска указанного шаблона в столбце, а мой столбец - ProductId
, поэтому я не могу понять, как получился такой пример:
Выбрать *
Из продуктов
Где SomeStringId - как «%» + ProductId + «%»;
Почему вышеприведенный пример работает, если Like не используется в моем столбце, он используется в некоторой строке ...