Отказ от ответственности : из разговора 1005 * выясняется, что OP использует не 2014, а 2005 (что полностью не поддерживается и используется годами). В результате ответ, использующий параметр типа таблицы, не будет работать, поскольку функциональность не существует.
Однако я оставил там ответ для будущих пользователей, у которых есть подобный вопрос.
Вместо использования списка с разделителями используйте параметр типа таблицы
CREATE TYPE dbo.PrimaryList AS TABLE (primary_no varchar(20) NOT NULL);
GO
ALTER PROC dbo.LinkProc @IDs dbo.PrimaryList READONLY AS
BEGIN
SELECT *
FROM dbo.link_tb l
LEFT JOIN @IDs I ON l.primary_no = I.primary_no
WHERE grp_id = 4
AND status_cd = 'A'
AND I.primary_no IS NULL;
END;
GO
Затем вы можете вызвать SP следующим образом:
DECLARE @IDs dbo.PrimaryList;
INSERT INTO @IDs
VALUES('00000447'),
('0000300'),
('2900071'),
('2900192');
EXEC dbo.LinkProc @IDs;
Редактировать: Почему то, что у вас не работает, это потому, что вы заключаете в кавычки свои значения. То, что вы делаете, эквивалентно:
EXEC dbo.LinkProc @IDs = '''00000447''';
Значение primary_no
не будет '00000447'
, оно просто будет 00000447
. Если у вас есть для передачи списка с разделителями (что я предлагаю против, и я не удивлюсь, если ваша функция использует WHILE
, и если это так, вам нужно удалитьчто), то не заключайте в кавычки значения:
EXEC dbo.LinkProc @IDs = '00000447,0000300,2900071,2900192';