[英]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.RegistrationNo
和RegistrationDetail.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
約束僅影響數據庫列(例如主/外鍵或常規列),而不影響整個表。 您可以為外鍵添加OnDelete
或OnUpdate
約束,以刪除/保留從一個表到另一個表(而不是整個表)的引用。 那就是將DML
(選擇,更新,插入,刪除)與DDL
(創建,刪除)混合在一起。 嘗試閱讀有關DML
和DDL
更多信息。
這是一篇很好的文章
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.