我在SQL Server 2008数据库中的两个表之间创建了一个外键关系。当我尝试从包含主键的表中删除一行时出现错误。如何从具有在其他表中用作外键的主键的表中删除行?
答案 0 :(得分:4)
这是具有外键约束的要点:您不能从一个表中删除具有从另一个表引用它们的记录的记录。
您可以在约束本身上使用on delete cascade
选项(您需要删除并重新创建它),或者首先从子表中删除引用记录,然后从父表中删除记录。
答案 1 :(得分:3)
两个选项:
使用级联删除作为选项重新创建表。更多细节在这里: 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)"
手动查找使用主键的子元素并删除:
<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 } ]
);