Jeg ved, at dette ikke besvarer det faktiske spørgsmål, men alle de løsninger, jeg har set til at håndtere dette, føles som et beskidt hack for at komme uden om de tidligere begrænsninger for ikke at kunne overføre flere værdier til en procedure. Siden introduktionen af tabelværdiparametre i sql-server 2008 kan jeg ikke se nogen grund til, hvorfor en afgrænset streng skulle være nødvendig i SQL:
Det første trin er at oprette din type til at indeholde værdierne (jeg plejer at bruge generiske navne, så de kan genbruges):
CREATE TYPE dbo.StringList AS TABLE (Value NVARCHAR(MAX));
Opret derefter din procedure:
CREATE PROCEDURE dbo.GetFromTable @OrgList dbo.StringList READONLY
AS
SELECT Something
FROM MyTable
WHERE Org + '-' + OrgSub IN (SELECT Value FROM @OrgList);
GO
Så kan du kalde din procedure som følger
DECLARE @OrgList dbo.StringList;
INSERT @OrgList VALUES
('2342342', '________', 'A'),
('5435354', '________', 'B');
EXECUTE dbo.GetFromTable @OrgList;
Dette ville endda give mulighed for at oprette en mere passende tabel:
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
Derefter for at udføre
DECLARE @OrgList dbo.OrgList;
INSERT @OrgList VALUES
('2342342', '________'),
('5435354', '________');
EXECUTE dbo.GetFromTable @OrgList;
Hvis det er absolut nødvendigt for at sende en kommasepareret liste, kan du konvertere den til StringList Type ved hjælp af XML-konvertering og bruge den samme procedure, men brug af en tabelværdiparameter giver mulighed for meget mere fleksibilitet end at bruge en separeret streng:
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