触发器中的奇怪问题
下面是表Table_1的触发器的一部分:
-- 每次向表Table_1中插入数据时,都要根据@LoginName找出另一个表(Table_2)中Data1字段的值,并将它赋予@ID,如果T2的值为null,则赋予@ID 5个字符0
-- @LoginName:用户号,每个用户号对应于唯一的UserName
begin
select @ID=T2 from Table_2 where UserName = @LoginName
if (@ID is null) set @ID='00000'
insert into Table_3( LoginName, ID ) values( @LoginName, @ID )
……
end
问题:在SQLServer 2000中,当向Table_1插入多次数据之后,发现其中有两条插入表中的时间是连着的记录中,那两条记录的@LoginName是一样的,但总是前一条记录的@ID能正常由Table_2检索出来,而后面一条的@ID却为"00000"。前一条能正常检索出数据,后一条为什么就不能正常检索数据呢???? 好奇怪!!!!
还请高手教教我, 谢谢!!
[解决办法]
select @ID=T2 from Table_2 where UserName = @LoginName
username可以重复,在加有个条件试一下
[解决办法]
begin
set @id is null --加多一句试试?
select @ID=T2 from Table_2 where UserName = @LoginName
if (@ID is null) set @ID= '00000 '
insert into Table_3( LoginName, ID ) values( @LoginName, @ID )
……
end
[解决办法]
这要看前面的逻辑,尤其是@LoginName前面是怎么获得的。
最大的可能是批量插入导致,比如一次插入两条记录。
[解决办法]
- SQL code
/*begin set @id is null --加多一句试试? select @ID=T2 from Table_2 where UserName = @LoginName if (@ID is null) set @ID= '00000 ' insert into Table_3( LoginName, ID ) values( @LoginName, @ID ) …… end ……@LoginName 是由插入Table_1的参数值中截取出来的。数据是大量插入Table_1的,1秒之内可能也会插入2条以上。-----------------------------批量和大量是两回事,批量是一次性插入多条,大量只能说明插入频繁。假设你的@LoginName是这样截取的:left(Table_1.参数值字段,10)下面给出处理批量插入的代码:*/insert into Table_3(LoginName,ID) select left(a.参数值字段,10),isnull(b.ID,'00000' from INSERTED a left join Table_2 b on left(a.参数值字段,10)=b.UserName
[解决办法]
- SQL code
--笔误insert into Table_3(LoginName,ID) select left(a.参数值字段,10),isnull(b.ID,'00000') from INSERTED a left join Table_2 b on left(a.参数值字段,10)=b.UserName