下面是表Table_1的触发器的一部分:
-- 每次向表Table_1中插入数据时,[email protected](Table_2)中Data1字段的值,[email protected],如果T2的值为null,[email protected] 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插入多次数据之后,发现其中有两条插入表中的时间是连着的记录中,[email protected],[email protected]_2检索出来,[email protected]"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
------解决方案--------------------
这要看前面的逻辑,[email protected]
最大的可能是批量插入导致,比如一次插入两条记录。
------解决方案--------------------
- 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条以上。-----------------------------批量和大量是两回事,批量是一次性插入多条,大量只能说明插入频繁。[email protected]: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