Wiem, że to nie odpowiada na rzeczywiste pytanie, ale wszystkie rozwiązania, które widziałem, aby sobie z tym poradzić, są jak brudny hack, aby ominąć poprzednie ograniczenia polegające na niemożności przekazania wielu wartości do procedury. Od czasu wprowadzenia parametrów o wartościach tabelarycznych w sql-server 2008 nie widzę powodu, dla którego oddzielony ciąg znaków byłby potrzebny w SQL:
Pierwszym krokiem jest utworzenie własnego typu, który będzie zawierał wartości (zwykle używam ogólnych nazw, aby można je było ponownie wykorzystać):
CREATE TYPE dbo.StringList AS TABLE (Value NVARCHAR(MAX));
Następnie utwórz procedurę:
CREATE PROCEDURE dbo.GetFromTable @OrgList dbo.StringList READONLY
AS
SELECT Something
FROM MyTable
WHERE Org + '-' + OrgSub IN (SELECT Value FROM @OrgList);
GO
Następnie możesz wywołać swoją procedurę w następujący sposób
DECLARE @OrgList dbo.StringList;
INSERT @OrgList VALUES
('2342342', '________', 'A'),
('5435354', '________', 'B');
EXECUTE dbo.GetFromTable @OrgList;
Dałoby to nawet możliwość stworzenia bardziej odpowiedniej tabeli:
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
Następnie wykonaj
DECLARE @OrgList dbo.OrgList;
INSERT @OrgList VALUES
('2342342', '________'),
('5435354', '________');
EXECUTE dbo.GetFromTable @OrgList;
Jeśli jest to absolutnie konieczne, aby przekazać listę rozdzielaną przecinkami, możesz przekonwertować ją na typ StringList za pomocą konwersji XML i użyć tej samej procedury, ale użycie parametru o wartości tabeli pozwala na znacznie większą elastyczność niż użycie rozdzielanego ciągu:
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