質問

私の質問を一般化しようと... 私は、SELECT文によって返された各結果のためのストアドプロシージャを実行します。

精神的に私のようなものを試してみたいです EXEC myStoredProc(WHERE COND = @param sometableからIDを選択)

私の特定のケースに関連する詳細... 私は、SaaSアプリケーションを持っています。私はシステムからテナントを削除したいと思います。私はテナントを削除することができます前に、私はそのテナントに関連付けられたデータベース内のすべてのレコードを削除する必要があります。

テナントは、そのようなフィールドの多くの異なる種類を含むフォームなどのアイテムを所有しています。私はすでにフォームと(フィールドなど)は、その関連アイテムのすべてを削除するストアドプロシージャを持っています。メンテナンス上の理由(Ieは。レコードとフォームの間dependancesとの関連付けを決定するロジックを複製したかったではない)のために私はちょうどテナントに属する各フォームのためにそれにStoredProcを呼び出すしたいと思います。

私のようなクエリを実行することにより、フォームのリストを取得することができます... テナント= @TenantId

フォームからフォームIDを選択します

私はそのクエリの結果でやりたいことはEXEC私Delete_Formストアドプロシージャです。

私はこれを行うことができますどのように?

役に立ちましたか?

解決

あなたが外部キーのコントロールを持っていないとカスケード削除を行うことができない場合は、あなたは、スルーループにカーソルを作成することができますし、それぞれのストアドプロシージャを実行します。

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

他のヒント

あなただけのカスケードの削除回すことができると親レコードを削除すると、それに関連するすべての子レコードを削除します。

あなたはカーソルを作成する必要がありますされていない場合(リンクは、SQLサーバーのためのものであるが、私は、フォームIDを引き抜くとそれぞれについて[Delete_Field_Procedure】実行結果のそれぞれを介して他のRDBMSのカーソルが類似していると仮定)、ループになります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top