如何从具有在其他表中用作外键的主键的表中删除行?

时间:2015-06-28 07:09:48

标签: sql sql-server-2008

我在SQL Server 2008数据库中的两个表之间创建了一个外键关系。当我尝试从包含主键的表中删除一行时出现错误。如何从具有在其他表中用作外键的主键的表中删除行?

2 个答案:

答案 0 :(得分:4)

这是具有外键约束的要点:您不能从一个表中删除具有从另一个表引用它们的记录的记录。

您可以在约束本身上使用on delete cascade选项(您需要删除并重新创建它),或者首先从子表中删除引用记录,然后从父表中删除记录。

答案 1 :(得分:3)

两个选项:

  1. 使用级联删除作为选项重新创建表。更多细节在这里: http://www.techonthenet.com/sql_server/foreign_keys/foreign_delete.php

    语法:

         meta charset="utf-8"  
         meta http-equiv="X-UA-Compatible" content="IE=8"  
         meta http-equiv="Page-Enter" content="blendTrans(Duration=0.1)"  
         meta http-equiv="Page-Exit" content="blendTrans(Duration=0.1)"  
    
  2. 手动查找使用主键的子元素并删除:

    <addClasspath>true</addClasspath>
    <classpathPrefix>*path to dependencies*</classpathPrefix>
    

    然后使用主键返回主表并删除行:

    CREATE TABLE **child_table**
    (
        column1 datatype [ NULL | NOT NULL ],
        column2 datatype [ NULL | NOT NULL ],
        ...
    
        CONSTRAINT fk_name
        FOREIGN KEY (child_col1, child_col2, ... child_col_n)
        REFERENCES parent_table (parent_col1, parent_col2, ... parent_col_n)
        ON DELETE CASCADE
           [ ON UPDATE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ] 
    );