这是D7里的bug?插入带触发器的表出错!
本帖最后由 drsheldoncooper 于 2013-03-17 00:59:02 编辑 D7+MSSQL2000
有2张表ab,a里有触发器,当插入数据到a时,复制现在表a(不是inserted)的某个字段值到b
---------建表---------------
if exists(select * from sysobjects where name='a') drop table a
go
create table a
(
a_a char(10) primary key,
a_b int
)
go
if exists(select * from sysobjects where name='b') drop table b
go
create table b (b_a int)
go
-------------触发器--------------
create trigger a_insert on a
for insert
as
insert into b select a_b from a
go
------------用查询分析器进行插入----------------
begin tran
insert into a values('001',1)
insert into a values('002',2)
insert into a values('003',3)
commit tran
select * from a
select * from b
运行结果:
a_a a_b
001 1
002 2
003 3
b_a
1
1
2
1
2
3
目前一切正常,但用D7批量插入3条记录却出现错误
delete from a
delete from b
//adoquery1打开表a
adoquery1.AppendRecord(['001',1]);
adoquery1.AppendRecord(['002',2]);
adoquery1.AppendRecord(['003',3]);
adoconnection1.BeginTrans;
try
adoquery1.UpdateBatch;
adoconnection1.CommitTrans;
except
on e: exception do
begin
showmessage(e.Message);
adoconnection1.RollbackTrans;
end;
end;
错误信息:键列信息不足或不正确。更新影响到多行。
如果认为是哪个表缺少主键,那下面这段只插入2行记录却运行正常
delete from a
delete from b
//adoquery1打开表a
adoquery1.AppendRecord(['001',1]);
adoquery1.AppendRecord(['002',2]);
adoconnection1.BeginTrans;
try
adoquery1.UpdateBatch;
adoconnection1.CommitTrans;
except
on e: exception do
begin
showmessage(e.Message);
adoconnection1.RollbackTrans;
end;
end;
运行结果:
a_a a_b
001 1
002 2
b_a
1
1
2
有大神知道原因吗,或者碰过类似的问题?是怎么解决的?谢过。
[解决办法]
顶一下看有遇到同类问题的筒子不
sql2000的触发器本身有bug, adoquery的post也有一些不可控的情况
LZ直接搜索该类问题看有解答没
[解决办法]
插入三条记录时,跟踪以如下内容
exec sp_executesql N'INSERT INTO "test".."a" ("a_a","a_b") VALUES (@P1,@P2); INSERT INTO "test".."a" ("a_a","a_b") VALUES (@P3,@P4); INSERT INTO "test".."a" ("a_a","a_b") VALUES (@P5,@P6); INSERT INTO
"test".."a" ("a_a","a_b") VALUES (@P7,@P8); INSERT INTO "test".."a" ("a_a","a_b") VALUES (@P9,@P10)',N'@P1 varchar(10),@P2 int,@P3 varchar(10),@P4 int,@P5 varchar(10),@P6 int,@P7 varchar(10),@P8 int,@P9
varchar(10),@P10 int','003 ',3,'002 ',2,'001 ',1,'002 ',2,'003 ',3
插入两条记录时,跟踪以下内容
exec sp_executesql N'INSERT INTO "test".."a" ("a_a","a_b") VALUES (@P1,@P2); INSERT INTO "test".."a" ("a_a","a_b") VALUES (@P3,@P4)',N'@P1 varchar(10),@P2 int,@P3 varchar(10),@P4 int','001
',1,'002 ',2有可能是TADOQuery的BUG哦。水平不高,查不出原因来。供参考。
[解决办法]
运行了一下,xe2+sql2008也有这种情况