Ich weiß, dass dies die eigentliche Frage nicht beantwortet, aber alle Lösungen, die ich gesehen habe, um damit umzugehen, fühlen sich wie ein schmutziger Hack an, um die vorherigen Einschränkungen zu umgehen, dass nicht mehrere Werte an eine Prozedur übergeben werden können. Seit der Einführung von Tabellenwertparametern in SQL-Server 2008 sehe ich keinen Grund, warum eine Zeichenfolge mit Trennzeichen in SQL benötigt wird:
Der erste Schritt besteht darin, Ihren Typ zu erstellen, der die Werte enthält (ich neige dazu, generische Namen zu verwenden, damit sie wiederverwendet werden können):
CREATE TYPE dbo.StringList AS TABLE (Value NVARCHAR(MAX));
Erstellen Sie dann Ihre Prozedur:
CREATE PROCEDURE dbo.GetFromTable @OrgList dbo.StringList READONLY
AS
SELECT Something
FROM MyTable
WHERE Org + '-' + OrgSub IN (SELECT Value FROM @OrgList);
GO
Dann können Sie Ihre Prozedur wie folgt aufrufen
DECLARE @OrgList dbo.StringList;
INSERT @OrgList VALUES
('2342342', '________', 'A'),
('5435354', '________', 'B');
EXECUTE dbo.GetFromTable @OrgList;
Dies würde sogar die Möglichkeit bieten, eine geeignetere Tabelle zu erstellen:
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
Dann ausführen
DECLARE @OrgList dbo.OrgList;
INSERT @OrgList VALUES
('2342342', '________'),
('5435354', '________');
EXECUTE dbo.GetFromTable @OrgList;
Wenn es absolut notwendig ist, eine kommagetrennte Liste zu übergeben, könnten Sie sie mithilfe der XML-Konvertierung in den StringList-Typ konvertieren und dasselbe Verfahren verwenden, aber die Verwendung eines Tabellenwertparameters bietet viel mehr Flexibilität als die Verwendung einer Zeichenfolge mit Trennzeichen:
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