这是我的情况:
假设我有一个存储过程,在该存储过程中,我需要在一组特定的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