簡體   English   中英

SQL Server中表之間的約束,刪除一個應刪除另一個

[英]Constraint between tables in SQL Server, deleting one should delete the other

我正在創建兩個表RegistrationHeader和RegistrationDetail。 我如何添加一個約束,以便在刪除RegistrationHeader表時自動刪除RegistrationDetail表。

create table RegistrationHeader(
    RegistrationNo numeric
    ,BillingID varchar(30) not null
    ,RegistrationDate date not null
    ,PaymentType varchar check (PaymentType = 'CC' or PaymentType = 'PO' or PaymentType = 'Check') not null
    ,CCNumber numeric check(CCNumber >= 15 and CCNumber <=16)
    ,PONumber varchar(30)
    ,CheckNumber varchar(10)
    ,primary key(RegistrationNo)
    ,foreign key(BillingId) references Person(UserID) 
    ,constraint CC_CCNumber_constr check(
        (PaymentType = 'CC' and CCNumber is not null)
        or
        (PaymentType != 'CC' and CCNumber is null)
    )
    ,constraint PO_PONumber_constr check(
        (PaymentType = 'PO' and (PONumber is not null or PONumber != ''))
        or
        (PaymentType != 'PO' and PONumber is null)
    )
    ,constraint CheckNumber_type_constr check(PaymentType != 'Check' and CheckNumber is null)
);

create table RegistrationDetail(
    RegistrationNo numeric
    ,LineNumber numeric
    ,CourseID numeric(10) not null
    ,AttendeeID varchar(30) not null
    primary key(RegistrationNo,LineNumber)
);

謝謝您的幫助!

您將需要

1)在RegistrationHeader.RegistrationNoRegistrationDetail.RegistrationNo之間建立外鍵關系

2)將ON DELETE CASCADE添加到RegistrationDetail外鍵定義

我沒有測試過,但是我相信這應該是您在SQL Server中尋找的東西

ALTER TABLE RegistrationDetail
ADD CONSTRAINT FK_RegistrationHeader_RegistrationDetail_Cascade
FOREIGN KEY (RegistrationNo) REFERENCES RegistrationDetail (RegistrationNo) ON DELETE CASCADE

約束僅影響數據庫列(例如主/外鍵或常規列),而不影響整個表。 您可以為外鍵添加OnDeleteOnUpdate約束,以刪除/保留從一個表到另一個表(而不是整個表)的引用。 那就是將DML (選擇,更新,插入,刪除)與DDL (創建,刪除)混合在一起。 嘗試閱讀有關DMLDDL更多信息。

這是一篇很好的文章

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM