Jag vet att detta inte svarar på själva frågan, men alla lösningar jag har sett för att hantera detta känns som ett smutsigt hack för att komma runt de tidigare begränsningarna med att inte kunna skicka flera värden till en procedur. Sedan introduktionen av tabellvärderade parametrar i sql-server 2008 kan jag inte se någon anledning till varför en avgränsad sträng skulle behövas inom SQL:
Det första steget är att skapa din typ för att innehålla värdena (jag brukar använda generiska namn så att de kan återanvändas):
CREATE TYPE dbo.StringList AS TABLE (Value NVARCHAR(MAX));
Skapa sedan din procedur:
CREATE PROCEDURE dbo.GetFromTable @OrgList dbo.StringList READONLY
AS
SELECT Something
FROM MyTable
WHERE Org + '-' + OrgSub IN (SELECT Value FROM @OrgList);
GO
Sedan kan du ringa din procedur enligt följande
DECLARE @OrgList dbo.StringList;
INSERT @OrgList VALUES
('2342342', '________', 'A'),
('5435354', '________', 'B');
EXECUTE dbo.GetFromTable @OrgList;
Detta skulle till och med ge möjlighet att skapa en mer lämplig tabell:
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
Sedan för att köra
DECLARE @OrgList dbo.OrgList;
INSERT @OrgList VALUES
('2342342', '________'),
('5435354', '________');
EXECUTE dbo.GetFromTable @OrgList;
Om det är absolut nödvändigt för att skicka en kommaavgränsad lista kan du konvertera den till StringList Type med XML-konvertering, och använda samma procedur, men att använda en tabellvärderad parameter ger mycket mer flexibilitet än att använda en avgränsad sträng:
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