Вы можете попробовать это:
DECLARE @mockperson TABLE(ID INT, PersName VARCHAR(100));
INSERT INTO @mockperson VALUES
(1,'pers 1')
,(2,'pers 2');
DECLARE @yourlist VARCHAR(100)='1,999,2';
- Запрос разбивает данный список и проверяет числа NOT IN
таблица персон
WITH Casted AS
(
SELECT CAST('<x>' + REPLACE(@yourlist,',','</x><x>') + '</x>' AS XML) AS TheListAsXml
)
SELECT x.value('text()[1]','int')
FROM Casted
CROSS APPLY TheListAsXml.nodes('/x') AS A(x)
WHERE x.value('text()[1]','int') NOT IN(SELECT ID FROM @mockperson);
Начиная с v2016
С STRING_SPLIT()
(v2016 +) это будет тот же подход, просто проще
SELECT *
FROM STRING_SPLIT(@yourlist,',') AS A
WHERE A.value NOT IN(SELECT ID FROM @mockperson);