Знам, че това не отговаря на действителния въпрос, но всички решения, които съм виждал, за да се справят с това, се чувстват като мръсен хак за заобикаляне на предишните ограничения да не можеш да предаваш множество стойности на процедура. След въвеждането на параметри с таблични стойности в sql-server 2008 не виждам причина защо в SQL е необходим ограничен низ:
Първата стъпка е да създадете вашия тип, който да съдържа стойностите (склонен съм да използвам общи имена, за да могат да се използват повторно):
CREATE TYPE dbo.StringList AS TABLE (Value NVARCHAR(MAX));
След това създайте своята процедура:
CREATE PROCEDURE dbo.GetFromTable @OrgList dbo.StringList READONLY
AS
SELECT Something
FROM MyTable
WHERE Org + '-' + OrgSub IN (SELECT Value FROM @OrgList);
GO
След това можете да извикате вашата процедура, както следва
DECLARE @OrgList dbo.StringList;
INSERT @OrgList VALUES
('2342342', '________', 'A'),
('5435354', '________', 'B');
EXECUTE dbo.GetFromTable @OrgList;
Това дори ще даде възможност за създаване на по-подходяща таблица:
CREATE TYPE dbo.OrgList AS TABLE(Org VARCHAR(10), OrgSub VARCHAR(10));
CREATE PROCEDURE dbo.GetFromTable @OrgList dbo.OrgList READONLY
AS
SELECT Something
FROM MyTable
WHERE EXISTS
( SELECT 1
FROM @OrgList O
WHERE MyTable.Org = o.Org
AND MyTable.OrgSub = o.OrgSub
);
GO
След това да се изпълни
DECLARE @OrgList dbo.OrgList;
INSERT @OrgList VALUES
('2342342', '________'),
('5435354', '________');
EXECUTE dbo.GetFromTable @OrgList;
Ако е абсолютно необходимо да подадете разделен със запетая списък, можете да го конвертирате в типа StringList с помощта на XML преобразуване и да използвате същата процедура, но използването на параметър със стойност на таблица позволява много повече гъвкавост, отколкото използването на разделен низ:
DECLARE @S VARCHAR(MAX) = '2342342-________,5435354-________,_______-________';
DECLARE @OrgList dbo.StringList;
INSERT @OrgList
SELECT Y.value('.', 'NVARCHAR(MAX)')
FROM (SELECT [X] = CAST(('<X>' + REPLACE(@S, ',' ,'</X><X>')+'</X>') AS XML)) X
CROSS APPLY X.nodes('X') AS y (Y)
EXECUTE GetFromTable @OrgList