小编典典

SQL遍历列表以在每个项目上调用EXEC

sql

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

精神上,我想尝试类似EXEC myStoredProc(从某个表的SELECT ID中选择cond = @param)

与我的特定案例有关的更多详细信息…我有一个SaaS应用程序。我想从系统中删除一个租户。在删除租户之前,我必须删除与该租户关联的数据库中的所有记录。

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

我可以通过运行如下查询来检索表单列表:从表单WHERE Tenant = @TenantId中选择formId

我要对该查询的结果执行的操作是EXEC Delete_Form存储过程。

我怎样才能做到这一点?


阅读 220

收藏
2021-04-22

共1个答案

小编典典

如果您无法控制外键并且无法执行级联删除,则可以创建一个游标来循环并为每个循环执行存储的proc。

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
2021-04-22