У меня есть хранимая процедура, которая принимает в качестве ввода строку GUID и выбирает из таблицы where table GUID IN (@Param).Использование uniqueidentifier с условием IN в SQL-сервере
@Param = 'b2e16cdc-1f1b-40e2-a979-f87a6a2457af,
c275dd13-bb54-4b8c-aa12-220b5980cabd,
af3552ec-37b1-4a76-81ad-1bd6b8c4cd6c,
3a7fda02-558b-49a9-a870-30350254d8c0,'
SELECT * FROM dbo.Table1 WHERE
TableGUID IN (@Param)
Однако, я заметил, что запрос возвращает значения, только если совпадает первый идентификатор GUID, иначе он ничего не вернет. что означает, что он сравнивается только с первым GUID в строке. Кто-нибудь знает, как решить проблему?
Почему бы не использовать отдельную переменную для всех значений и присвоить диапазон, как IN (@ Param1, @ Param2, @ Param3 ...)? – vendettamit
SQL, как правило, с большинством языков, когда передается ** одиночный ** параметр, который является строкой, не будет проверять содержимое строки, находить запятые и решать вместо этого рассматривать параметр * single * как ** multiple * *, возможно, даже другого типа данных. Зачем вам это ожидать? –
Было бы лучше определить вашу хранимую процедуру, чтобы принять параметр соответствующего типа данных, который ** разработан ** для хранения нескольких отдельных значений. В SQL Server есть два таких типа: табличные параметры или xml. –