Вы можете использовать not exists
и string_split()
:
select ss.value
from string_split(@serviceids, ',') ss
where not exists (select 1
from service s
where try_convert(int, ss.value) = s.id
);
Вы не можете контролировать значения, передаваемые в хранимую процедуру, поэтому для предотвращения ошибок преобразования используется try_convert()
- при условии, что столбец сравнения представляет собой число.
РЕДАКТИРОВАТЬ:
Вы можете повторно объединить значения, если хотите:
select string_agg(ss.value, ',') within group (order by ss.value)
from string_split(@serviceids, ',') ss
where not exists (select 1
from service s
where try_convert(int, ss.value) = s.id
);