你不需要这个以“循环”的方式运行。你可以只使用一个公用表表达式生成行,与尽可能多的行每财产有在产权车库:
with GarageRows as (
select id
, garagecount
, 0 [counter]
from Properties
union all
select p.id
, 1
, gr.counter + 1
from GarageRows gr
inner join Properties p on gr.id = p.id
where gr.counter + 1 < p.garagecount)
insert into Garages(PropertyID)
select gr.ID
from GarageRows gr
where gr.garagecount > 0
如果你只是想测试上面的CTE的结果,你可以运行下面的查询,该查询生成两个属性的行,一个包含2个车库,另一个包含4个车库。
declare @properties table (id int, garagecount int)
insert @properties values (1, 2), (2, 4)
;with GarageRows as (
select id
, garagecount
, 0 [counter]
from @Properties
union all
select p.id
, 1
, gr.counter + 1
from GarageRows gr
inner join @Properties p on gr.id = p.id
where gr.counter + 1 < p.garagecount)
select gr.ID
from GarageRows gr
where gr.garagecount > 0
order by gr.ID
所以,如果您的查询返回'1 ,4',你想四次插入'1'? – HoneyBadger
这就是我正在寻找的。 – Daniel