我想删除子表及其父表的记录,但是这里有一个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