Saya tahu ini tidak menjawab pertanyaan yang sebenarnya, tetapi semua solusi yang saya lihat untuk menangani ini terasa seperti peretasan kotor untuk mengatasi batasan sebelumnya karena tidak dapat memberikan banyak nilai ke suatu prosedur. Sejak pengenalan parameter bernilai tabel di sql-server 2008 saya tidak melihat alasan mengapa string yang dibatasi diperlukan dalam SQL:
Langkah pertama adalah membuat tipe Anda untuk memuat nilai (saya cenderung menggunakan nama generik sehingga dapat digunakan kembali):
CREATE TYPE dbo.StringList AS TABLE (Value NVARCHAR(MAX));
Kemudian buat prosedur Anda:
CREATE PROCEDURE dbo.GetFromTable @OrgList dbo.StringList READONLY
AS
SELECT Something
FROM MyTable
WHERE Org + '-' + OrgSub IN (SELECT Value FROM @OrgList);
GO
Kemudian Anda dapat memanggil prosedur Anda sebagai berikut
DECLARE @OrgList dbo.StringList;
INSERT @OrgList VALUES
('2342342', '________', 'A'),
('5435354', '________', 'B');
EXECUTE dbo.GetFromTable @OrgList;
Ini bahkan akan memberikan kesempatan untuk membuat tabel yang lebih tepat:
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
Kemudian untuk mengeksekusi
DECLARE @OrgList dbo.OrgList;
INSERT @OrgList VALUES
('2342342', '________'),
('5435354', '________');
EXECUTE dbo.GetFromTable @OrgList;
Jika benar-benar diperlukan untuk melewatkan daftar yang dipisahkan koma, Anda dapat mengonversinya ke Tipe StringList menggunakan konversi XML, dan menggunakan prosedur yang sama, tetapi menggunakan parameter bernilai tabel memungkinkan lebih banyak fleksibilitas daripada menggunakan string yang dibatasi:
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