删除SQL server中父表及其直接和间接子表中的所有行



我想删除子表及其父表的记录,但是这里有一个catch,我必须删除父表的间接子表。

让我们举一个例子来进一步理解这个问题:

  • 我的数据库是非常结构化的,我有特定的名字与一些前缀相关联,比如员工数据,所有表都将从Emplyee*表开始。

  • 每个模块都有相同的表前缀集。我有将近20组表格,我需要根据提供的方式删除数据。如果提供了Employer,我需要删除雇主及其雇员的数据,以及雇员选择的产品。

  • Employer_Details有一个ID (PK),它是所有Employer_*表和Employee_MainTable表的参考。Employee_MainTable有一个employee_ID (PK),与product一样在所有Employee_*表中被引用。

因此,当我将Employer作为表名和列名作为ID传递给proc时,它应该根据上述条件删除表(Employer, Employee和Product)中的所有数据。如果我传递Employee,那么它应该从Employee_*Product_*表中删除数据。

我已经开始了一点,但需要一些专家的意见,使它容易。我不想提及表的名称,而不是我只需要一些动态查询,它将根据引用获得所有表,并多列顺序号,以便我将根据顺序号删除。

我们没有级联删除,因为这些表是存在的,我们不能改变它们。我想通过使用Information_Schema来得到这个。表示动态。

希望不要太复杂!!谢谢! !

如果父级有关系,可以使用Cascade delete

如果你的表没有直接的关系,那么你只需要写一个过程来删除你需要根据传入的信息

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

相关内容

最新更新