我正在尝试使用以下存储过程从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做错了什么?
由于
答案 0 :(得分:3)
您必须设置外键强制执行才能通过Cascade delete删除子表中的记录。禁用外键也是糟糕的数据库设计,可能会让你遇到麻烦。