SQL迭代列表以在每个项目上调用EXEC

Jus*_*tin 4 sql iteration loops stored-procedures exec

尝试概括我的问题...我想为SELECT语句返回的每个结果执行存储过程.

在心理上我想尝试像EXEC myStoredProc(SELECT id FROM sometable WHERE cond = @param)

有关我的具体案例的更多细节......我有一个SaaS应用程序.我想从系统中删除租户.在我删除租户之前,我必须删除与该租户关联的数据库中的所有记录.

租户拥有诸如包含许多不同类型的字段的表单之类的项目.我已经有一个存储过程删除一个Form及其所有相关项(如Fields).出于维护原因(即不想复制确定记录和表单之间的依赖关系和关联的逻辑)我想为每个属于租户的表单调用StoredProc.

我可以通过运行查询来检索表单列表...选择formId FROM Forms WHERE Tenant = @TenantId

我想对该查询的结果做的是EXEC我的Delete_Form存储过程.

我怎样才能做到这一点?

Sco*_*vey 6

如果您无法控制外键并且无法进行级联删除,则可以创建一个游标循环直播并为每个执行存储过程.

declare @formID int
declare FormsCursor cursor fast_forward for Select formId FROM Forms WHERE Tenant = @Tenant

open FormsCursor

fetch next from FormsCursor into @formID

while @@fetch_status = 0
begin

   exec Delete_Form @formID

   fetch next from FormsCursor into @formID

end

close FormsCursor
deallocate FormsCursor
Run Code Online (Sandbox Code Playgroud)