我遇到与外键有关的问题。我正在使用SQL Server 2008.
有两个表,即客户和发票,它们看起来像这样:
客户表:
客户ID
名称
地址
发票表
InvoiceID
日期
客户id
Customer表中的CustomerID列是主键,Invoice表中的CustomerID列具有外键。
我想删除Customer表中的一行,但是没有删除Invoice表中的已连接行。有没有办法做到这一点?
修改
我忘了提到已删除的客户存储在日志表中,因此ID仍然存在,但在另一个表中
答案 0 :(得分:6)
“我想删除Customer表中的一行,但不删除 发票表中的已连接行。“
外键的全部和整点都是为了防止你这样做。
约束强制执行规则,该规则声明发票必须属于客户。那么,如果发票不属于客户,那么在您的申请中意味着什么?它应该属于什么?
或者以商业术语来说,如果发票没有客户谁支付它?
对于copurse,我的咆哮假定Invoice.CustomnerID
是强制性列。也许您的数据模型允许它是可选的。在这种情况下,将teh列设置为NULL,然后您可以删除Customer记录。鉴于潜在的业务规则 - 必须支付发票(或公司破产)我认为这将是一个有缺陷的数据模型,但是嘿!
答案 1 :(得分:0)
从SQL Management Studio调整您的FK约束,如此处。突出显示的删除规则概述了您想要在相关表记录上强制执行哪种强制执行,我看到的approprite选项可以是下拉列表中的Set Default或Set Null。请考虑附上的图片。