Tôi biết điều này không trả lời được câu hỏi thực tế, nhưng tất cả các giải pháp tôi đã thấy để xử lý điều này đều cảm thấy giống như một cuộc tấn công bẩn thỉu để vượt qua những hạn chế trước đây là không thể chuyển nhiều giá trị cho một thủ tục. Kể từ khi giới thiệu các tham số có giá trị bảng trong sql-server 2008, tôi không thấy lý do gì tại sao lại cần một chuỗi phân tách trong SQL:
Bước đầu tiên là tạo kiểu của bạn để chứa các giá trị (tôi có xu hướng sử dụng các tên chung để chúng có thể được sử dụng lại):
CREATE TYPE dbo.StringList AS TABLE (Value NVARCHAR(MAX));
Sau đó, tạo thủ tục của bạn:
CREATE PROCEDURE dbo.GetFromTable @OrgList dbo.StringList READONLY
AS
SELECT Something
FROM MyTable
WHERE Org + '-' + OrgSub IN (SELECT Value FROM @OrgList);
GO
Sau đó, bạn có thể gọi thủ tục của mình như sau
DECLARE @OrgList dbo.StringList;
INSERT @OrgList VALUES
('2342342', '________', 'A'),
('5435354', '________', 'B');
EXECUTE dbo.GetFromTable @OrgList;
Điều này thậm chí sẽ tạo cơ hội để tạo một bảng thích hợp hơn:
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
Sau đó để thực thi
DECLARE @OrgList dbo.OrgList;
INSERT @OrgList VALUES
('2342342', '________'),
('5435354', '________');
EXECUTE dbo.GetFromTable @OrgList;
Nếu thực sự cần thiết để chuyển một danh sách được phân tách bằng dấu phẩy, bạn có thể chuyển đổi nó thành Loại StringList bằng cách sử dụng chuyển đổi XML và sử dụng quy trình tương tự, nhưng sử dụng tham số có giá trị bảng cho phép linh hoạt hơn nhiều so với việc sử dụng một chuỗi được phân tách:
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