あなたがストアドプロシージャでこれを行うことを余儀なくし、あなたの配列は次の2つのリストを結合することができ、同じサイズされている場合は、それらを分割次に、必要なリンクされたセットを取得するために位置(各配列の要素の数)に参加します。
以下の例ではnumber tableを使用していますが、その分割操作をanyと置き換えることができます。
-- if you dont have a number table:
/*
create table [dbo].[Number](n int not null primary key clustered);
insert into dbo.Number
values (1),(2),(3),(4),(5),(6),(7),(8),(9),(10),
(11),(12),(13),(14),(15),(16),(17),(18),(19),(20)
*/
declare @lstid varchar(100) = '1,2,3,4,51',
@lstvalue varchar(100) = '10,20,22,35,60'
declare @Length tinyint,
@Input varchar(8000),
@Delimiter char(1)
-- sanity check
if len(@lstid)-len(replace(@lstid, ',', '')) <> len(@lstvalue)-len(replace(@lstvalue, ',', ''))
begin
raiserror('lists are not equal', 16, 1);
return;
end
--count the numbers of elements in one of the arrays
select @Length = len(@lstid)-len(replace(@lstid, ',', ''))+1;
--join the two arrays into one
select @Input = @lstid + ',' + @lstvalue;
set @Delimiter = ',';
;with cte (i,s)
as (
select row_number() over (order by n.n asc) [i],
substring(@Delimiter + @Input + @Delimiter, n.n + 1, charindex(@Delimiter, @Delimiter + @Input + @Delimiter, n.n + 1) - n.n - 1) [s]
from dbo.Number n
where n.n = charindex(@Delimiter, @Delimiter + @Input + @Delimiter, n.n) and
n.n <= len(@Delimiter + @Input)
)
select a.s, b.s
from cte a
join cte b on
[email protected] = b.i
order
by a.i;
return
さまざまなオプションについては、こちらの記事を参照してください。http://www.sommarskog.se/arrays-in-sql-2005.html –