0

子テーブルとその親テーブルのレコードを削除したいのですが、これには問題があり、その親テーブルの間接的な子も削除する必要があります。

問題をより理解するために、例を挙げてみましょう。

  • 私のデータベースは非常に構造的であり、すべてのテーブルがテーブルで始まる従業員データのように、いくつかのプレフィックスに関連付けられた特定の名前がありますEmplyee*

  • 各モジュールには、テーブルの同じプレフィックス セットがあります。雇用主が提供されている場合、提供されたタイプに基づいてデータを削除する必要があるテーブルのセットがほぼ 20 セットあります。雇用主とその従業員、および従業員が選択した製品のデータを削除する必要があります。

  • Employer_Detailsには、すべての表とIDで参照される (PK) があります。製品と同じすべての表で参照される(PK) があります。Employer_*Employee_MainTableEmployee_MainTableemployee_IDEmployee_*

そのため、Employer をテーブル名として、列名を ID として proc に渡すと、上記の条件に基づいてテーブル (Employer、Employee、および Product) からすべてのデータを削除する必要があります。Employee を渡すEmployee_*と、Product_*テーブルからデータが削除されます。

少し始めましたが、簡単にするために専門家のコメントが必要です。テーブル名については言及したくありません。代わりに、列の順序番号をもう 1 つ持つ参照に基づいてすべてのテーブルを取得する動的クエリが必要なので、順序番号に従って削除します。

これらのテーブルは既存のものであり、変更できないため、カスケード削除はありませんInformation_Schema.Tablesは動的を意味します。

複雑すぎないことを願っています!! ありがとう!!

4

2 に答える 2

2

親が関係を持っている場合は、カスケード削除を使用できます

于 2013-03-08T14:01:02.053 に答える
0

テーブルに直接の関係がない場合は、渡された情報に基づいて必要なものを削除する手順を作成する必要があります。

DECLARE @TableType varchar(30)

BEGIN
    IF(@TableType = 'Employer')
    BEGIN
        DELETE FROM MyTable1 WHERE ID = 1234;
        DELETE FROM MyTable2 WHERE ID = 1234;
    END

    IF(@TableType = 'Employee')
    BEGIN
        DELETE FROM MyTable3 WHERE Employee_ID = 1234;
        DELETE FROM MyTable4 WHERE Employee_ID = 1234;    
    END
END
于 2013-03-08T16:31:41.503 に答える