删除父记录和子记录

时间:2013-08-01 14:41:39

标签: sql-server sql-server-2008

我正在尝试使用以下存储过程从db中删除父记录和子记录:

CREATE PROCEDURE [dbo].[DeleteCompanyPersonAndPhoneNumbers] (
    @personId int,
    @deleted bit output)
AS
BEGIN
    SET NOCOUNT ON;
    SET XACT_ABORT ON;

    set @deleted = 0

    begin transaction

        -- delete the phone numbers
        delete from PersonalPhoneNumber 
            where PersonalPhoneNumber.PersonId = @personId

        delete from ProfessionalProfile
            where ProfessionalProfile.Person_Id = @personId  

        delete from aspnet_UserProfile
            where aspnet_UserProfile.Person_ID = @personId

        delete from Accreditation
            where Accreditation.Person_ID = @personId

        delete from Qualification
                where Qualification.Person_ID = @personId

        delete from PERSON where Person_ID = @personId

        set @deleted = 1

    commit transaction

END

我已将外键强制设置为关闭。运行sp时,只删除父记录。

我在SP做错了什么?

由于

1 个答案:

答案 0 :(得分:3)

您必须设置外键强制执行才能通过Cascade delete删除子表中的记录。禁用外键也是糟糕的数据库设计,可能会让你遇到麻烦。