1. ホーム
  2. sql

[解決済み] T-SQLです。既知の値の配列のループ処理

2022-03-08 22:21:49

質問

以下は私のシナリオです。

例えば、あるストアドプロシージャで、特定のIDのセットで別のストアドプロシージャを呼び出す必要があるとします。

つまり、このようなことをする必要がないのです。

exec p_MyInnerProcedure 4
exec p_MyInnerProcedure 7
exec p_MyInnerProcedure 12
exec p_MyInnerProcedure 22
exec p_MyInnerProcedure 19

このようなことをすると

*magic where I specify my list contains 4,7,12,22,19*

DECLARE my_cursor CURSOR FAST_FORWARD FOR
*magic select*

OPEN my_cursor 
FETCH NEXT FROM my_cursor INTO @MyId
WHILE @@FETCH_STATUS = 0
BEGIN

exec p_MyInnerProcedure @MyId

FETCH NEXT FROM my_cursor INTO @MyId
END

私の主な目的は、保守性(ビジネスの変化に応じてIDを簡単に削除・追加できること)、すべてのIDを一行で一覧できること...です。パフォーマンスはそれほど大きな問題ではないはずです。

解決方法は?

declare @ids table(idx int identity(1,1), id int)

insert into @ids (id)
    select 4 union
    select 7 union
    select 12 union
    select 22 union
    select 19

declare @i int
declare @cnt int

select @i = min(idx) - 1, @cnt = max(idx) from @ids

while @i < @cnt
begin
     select @i = @i + 1

     declare @id = select id from @ids where idx = @i

     exec p_MyInnerProcedure @id
end