Seni SO'ya yönlendirmekle ya da buraya cevaplamak arasındayım. 'Çünkü bu neredeyse bir programlama sorusu. Ama kullandığım bir çözümü zaten aldığımdan beri ... Bunu göndereceğim;)
Bunun işleyiş şekli, virgülle ayrılmış bir dizgiyi (basit bölme, CSV stil bölmeleri yapmaz) depolanan yordama bir varchar (4000) olarak beslemeniz ve bu listeyi bu işleve beslemeniz ve kullanışlı bir tablo çıkarmanızdır. sadece varchars bir tablo.
Bu, sadece işlenmesini istediğiniz kimlikleri değerlerini göndermenize izin verir ve bu noktada basit bir birleştirme yapabilirsiniz.
Alternatif olarak, bir CLR DataTable ile bir şeyler yapabilir ve bunu besleyebilirsiniz, ancak bu desteklenmesi biraz daha fazla olur ve herkes CSV listelerini anlar.
USE [Database]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [dbo].[splitListToTable] (@list nvarchar(MAX), @delimiter nchar(1) = N',')
RETURNS @tbl TABLE (value varchar(4000) NOT NULL) AS
/*
http://www.sommarskog.se/arrays-in-sql.html
This guy is apparently THE guy in SQL arrays and lists
Need an easy non-dynamic way to split a list of strings on input for comparisons
Usage like thus:
DECLARE @sqlParam VARCHAR(MAX)
SET @sqlParam = 'a,b,c'
SELECT * FROM (
select 'a' as col1, '1' as col2 UNION
select 'a' as col1, '2' as col2 UNION
select 'b' as col1, '3' as col2 UNION
select 'b' as col1, '4' as col2 UNION
select 'c' as col1, '5' as col2 UNION
select 'c' as col1, '6' as col2 ) x
WHERE EXISTS( SELECT value FROM splitListToTable(@sqlParam,',') WHERE x.col1 = value )
*/
BEGIN
DECLARE @endpos int,
@startpos int,
@textpos int,
@chunklen smallint,
@tmpstr nvarchar(4000),
@leftover nvarchar(4000),
@tmpval nvarchar(4000)
SET @textpos = 1
SET @leftover = ''
WHILE @textpos <= datalength(@list) / 2
BEGIN
SET @chunklen = 4000 - datalength(@leftover) / 2
SET @tmpstr = @leftover + substring(@list, @textpos, @chunklen)
SET @textpos = @textpos + @chunklen
SET @startpos = 0
SET @endpos = charindex(@delimiter, @tmpstr)
WHILE @endpos > 0
BEGIN
SET @tmpval = ltrim(rtrim(substring(@tmpstr, @startpos + 1,
@endpos - @startpos - 1)))
INSERT @tbl (value) VALUES(@tmpval)
SET @startpos = @endpos
SET @endpos = charindex(@delimiter, @tmpstr, @startpos + 1)
END
SET @leftover = right(@tmpstr, datalength(@tmpstr) / 2 - @startpos)
END
INSERT @tbl(value) VALUES (ltrim(rtrim(@leftover)))
RETURN
END