Anda dapat meneruskannya sebagai daftar yang dipisahkan koma, lalu menggunakan fungsi split, dan menggabungkan hasilnya.
CREATE FUNCTION dbo.SplitInts
(
@List VARCHAR(MAX),
@Delimiter CHAR(1)
)
RETURNS TABLE
AS
RETURN
(
SELECT Item = CONVERT(INT, Item)
FROM
(
SELECT Item = x.i.value('(./text())[1]', 'INT')
FROM
(
SELECT [XML] = CONVERT(XML, '<i>'
+ REPLACE(@List, @Delimiter, '</i><i>')
+ '</i>').query('.')
) AS a
CROSS APPLY
[XML].nodes('i') AS x(i)
) AS y
WHERE Item IS NOT NULL
);
Sekarang prosedur tersimpan Anda:
CREATE PROCEDURE dbo.doStuff
@List VARCHAR(MAX)
AS
BEGIN
SET NOCOUNT ON;
SELECT cols FROM dbo.table AS t
INNER JOIN dbo.SplitInts(@List, ',') AS list
ON t.ID = list.Item;
END
GO
Kemudian untuk menyebutnya:
EXEC dbo.doStuff @List = '1, 2, 3, ...';
Anda dapat melihat beberapa latar belakang, opsi lain, dan perbandingan kinerja di sini:
- Pisahkan string dengan cara yang benar – atau yang terbaik berikutnya cara
- Memisahkan String :Tindak Lanjut
- Memisahkan String :Sekarang dengan lebih sedikit T-SQL
- Membandingkan metode pemisahan / penggabungan string
- Memproses daftar bilangan bulat :pendekatan saya
- Membagi daftar bilangan bulat :pengumpulan lagi
- Selengkapnya tentang memisahkan daftar :pembatas khusus, mencegah duplikat, dan menjaga ketertiban
- Menghapus Duplikat dari String di SQL Server
Namun, pada SQL Server 2016 atau lebih tinggi, Anda harus melihat STRING_SPLIT()
dan STRING_AGG()
:
- Kejutan dan Asumsi Kinerja :STRING_SPLIT()
- STRING_SPLIT() di SQL Server 2016 :Tindak Lanjut #1
- STRING_SPLIT() di SQL Server 2016 :Tindak Lanjut #2
- SQL Server v.Berikutnya :Performa STRING_AGG()
- Pecahkan masalah lama dengan fungsi STRING_AGG dan STRING_SPLIT baru SQL Server