【问题标题】:UPDATE statement conflicted with the FOREIGN KEY constraint on Sql Server 2014UPDATE 语句与 Sql Server 2014 上的 FOREIGN KEY 约束冲突
【发布时间】:2018-06-26 13:08:06
【问题描述】:

大家好,我必须在服务器 sql 2014 上更新外键,但是当我运行下面的代码时出现以下错误,如何解决?

错误:

消息 3621,级别 0,状态 0。 该语句已终止。 消息 547,级别 16,状态 0。 UPDATE 语句与 FOREIGN KEY 约束“fk_restirizione_idrapportomobile”冲突。冲突发生在数据库“db”、表“dbo.RapportoMobile”、列“IdRapportoMobile”中。 (第 1 行)

SQL 代码:

UPDATE risorsarapportomobile 
SET    risorsarapportomobile.idrapportomobile = 1236 
WHERE  risorsarapportomobile.idrisorseumane IN (SELECT 
       risorseumane.idrisorseumane 
                                                FROM   risorsarapportomobile 
                                                       INNER JOIN risorseumane 
                                                               ON 
       risorseumane.idrisorseumane = 
       risorsarapportomobile.idrisorseumane 
       WHERE  risorsarapportomobile.idrapportomobile IS NULL 
       AND CONVERT(VARCHAR(10), '26-06-2018', 105) = 
           CONVERT(VARCHAR(10), risorseumane.data, 105) 
       AND risorseumane.idcantiere = 158) 

表格:

【问题讨论】:

  • 值 1236 必须已经在外键指向的任何表中。如果您提取外键定义,它将告诉您该表是什么。外键是数据库中非常基本的概念 - 你应该了解它们
  • FK 的存在是有原因的 - 不要放弃它!
  • 您正在尝试更新引用表 RapportoMobile 的表中的键。这意味着您的密钥不匹配。如果您在RapportoMobile 上有一个 ON UPDATE CASCADE 约束,那么更新主表将修复它。但必须先在这里完成
  • 我们需要您的 FK 代码。你能找到这个 FK(在 SSMS 对象资源管理器上,展开(+ 图标)risorsarapportomobile,展开 Keyes,右键单击“fk_restirizione_idrapportomobile”,修改)并发布它的代码吗?

标签: sql sql-server


【解决方案1】:

您的idRaprortoMobile12,而不是12361236idRapporto。检查你的外键指向哪一列,你会发现问题所在。

【讨论】:

    【解决方案2】:

    由于你在 SET 之后只有一个字段,并且由于错误信息,我们可以推断出

    您要输入的值 1236 不存在于 dbo.RapportoMobile.IdRapportoMobile 中,它是外键的目标。

    先将值添加到该列,然后运行更新。

    【讨论】:

    • 如果不先选择,我如何知道要更新哪些行?
    • 不确定你的意思是什么序列。您必须在 dbo.RapportoMobile 中插入一行 IdRapportoMobile=1236,然后您可以进行更新。
    • RapportoMobile 表中已经存在值 1236,我只需要使用该值更新另一个表
    • 1236 必须在 IdRapportoMobile 列中,而不是 RapportoMobile 列中
    • 如果 idrapportomobile 应该针对 RapportoMobile 而不是 IdRapportoMobile,那么您的触发器是错误的。否则,也许您应该使用 12 而不是 1236,因为这是您提到的行的对应值。
    猜你喜欢
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    相关资源
    最近更新 更多