【问题标题】:SQL Server create table error - may cause cycles or multiple cascade pathsSQL Server 创建表错误 - 可能导致循环或多个级联路径
【发布时间】:2016-10-20 20:18:18
【问题描述】:

我正在尝试创建这个活动表:

CREATE TABLE activity 
(
    activity_id int,
    description varchar(300),
    start_date date,
    due_date date,
    plannes_price float,
    hours_worked int,
    billing_rate float,
    actual_price float,
    status varchar(50),
    employee_id int,
    date_completed date,
    service_id int,

    CONSTRAINT pk_activityId PRIMARY KEY (activity_id),
    CONSTRAINT fk_act_emp_id FOREIGN KEY (employee_id) 
         REFERENCES employee(employee_id) 
         ON UPDATE CASCADE ON DELETE SET NULL,
    CONSTRAINT fk_act_ser_id FOREIGN KEY (service_id) 
         REFERENCES service(service_id) 
         ON UPDATE CASCADE ON DELETE NO ACTION
)

但我收到此错误:

消息 1785,第 16 级,状态 0,第 114 行
在表 'activity' 上引入 FOREIGN KEY 约束 'fk_act_ser_id' 可能会导致循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。

消息 1750,第 16 级,状态 0,第 114 行
无法创建约束或索引。查看以前的错误。

如果我设置fk_act_ser_id 约束UPDATE NO ACTION,那么代码将毫无错误地运行。但我想设置它是UPDATE CASCADE。

有谁知道如何解决这个问题?

【问题讨论】:

  • 我们还要查看service 表的 DDL。
  • 旁注:使用float(或realdouble)获取价格或费率信息 - 这些类型臭名昭著不准确,并容易成为舍入错误的牺牲品。将decimal(p,s) 用于所有与金钱相关的值!
  • 哦好的..谢谢你:)

标签: sql sql-server sql-server-2008


【解决方案1】:

所有关于此处未显示的表格。有多种删除activity 的方法——其中一种方法有两条路径到activity。例如,如果service 可以导致employee 的删除(或者employee 的删除可以删除service)...或其他一些删除路径。从给定的起始表到任何表,您只能有一个删除/更新路径。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-20
    • 2016-03-26
    • 2019-09-22
    • 1970-01-01
    • 2020-10-27
    • 1970-01-01
    • 2022-01-05
    • 2020-06-14
    相关资源
    最近更新 更多