删除记录时的外键参考错误,大家帮帮我吧!DELETE 语句与 COLUMN REFERENCE 约束
建库语句:
create database SFTMG
use SFTMG
create table t_project(pid smallint IDENTITY,pname varchar(80),pnumber varchar(10),prequir varchar(3000),pdescribe varchar(4000),pisend smallint,primary key (pid),unique(pnumber))
create table t_active(aid smallint IDENTITY,aname varchar(80),anumber varchar(10),adescribe varchar(4000),astarttime datetime,aendtime datetime,pid smallint,precostdate mallint,primary key(aid),foreign key (pid) references t_project(pid))
create table t_manpower(mid smallint IDENTITY,mname varchar(40),msex smallint,mbirthday datetime,mknowlege varchar(20),mcost smallint,misend smallint,mresume varchar(4000),primary key(mid))
create table t_A_M(aid smallint,mid smallint, primary key (aid,mid),foreign key(aid) references t_active(aid),foreign key(mid) references t_manpower(mid))
create table t_A_A(aid smallint,Paid smallint, primary key (aid,Paid),foreign key(aid) references t_active(aid),foreign key(paid) references t_active(aid))
这种结构的数据,在进行删除时出现错误:
执行语句:
begin tran
declare @aid integer
set @aid=5
delete from t_A_m where aid=@aid
delete from t_A_A where aid=@aid
delete from t_active where pid=2 and aid=@aid
commit tran
错误信息:
(所影响的行数为 0 行)
(所影响的行数为 0 行)
服务器: 消息 547,级别 16,状态 1,行 6
DELETE 语句与 COLUMN REFERENCE 约束 'FK_t_A_A_t_active1' 冲突。该冲突发生于数据库 'SFTMG',表 't_A_A', column 'paid'。
语句已终止。
为什么出错了,我不是提前删除关联表的了吗?
问题点数:20、回复次数:3Top
1 楼lzhs(快乐至上)回复于 2006-03-03 16:59:16 得分 20
可能是你用了显式事务的原因.
我自己的分析如下:
当用显式事务时,由于你还没有显式的Commit或Rollback事务,因此SQL Server会认为此时的关联表并没有被真正的删除!
先不要用事务试一下,如果成功的话,就可以证明我上面的说法是正确的了!
呵呵...
其实,也可以有另外一种解决方法,就是将关联表的外键设置为Cascade删除...
Top
2 楼qiaoqia6448()回复于 2006-03-03 20:49:14 得分 0
实践证明事务没有问题,按照您老人家的方法,拔出错的的外键设为Cascade删除就可以了,
但是我还是不明白其中的道理?能讲解一下吗?
还有我怎么给你加分呀?Top
3 楼lzhs(快乐至上)回复于 2006-03-03 23:02:38 得分 0
...
我说的事务的原因好像不存在呢.
开始没有仔细看你的表的结构,现在才发现,t_A_A表建的好复杂.
你试一下在"企业管理器"-->"表t_A_A上"-->"管理相关性"里,找到两个外键,把"级联删除相关记录"勾上试试呢.Top
相关问题
- INSERT 语句与 COLUMN FOREIGN KEY 约束冲突。
- DELETE 语句与 COLUMN REFERENCE 约束冲突?怎么解决?
- DELETE 语句与 COLUMN REFERENCE 约束 'FK__titleauth__au_id__0519C6AF' 冲突
- 怎么用sql语句为表增加一个主键约束
- 求救约束语句
- 请问:使外键的约束失效的sql语句如何写啊?
- 用CreateTable SQL语句创建了一个表,并定义了主键,那么如何用ALTER TABLE语句将这个主键的约束删除呢?
- 建表的时候,设置外键约束条件老是出错,到底语句应该怎么写呢?
- 请教大侠利用SQL语句如何建立可连锁更新和删除相关记录的外键约束?
- [请邹键] 求Delete语句




