当前位置: 代码迷 >> Sql Server >> 触发器中的奇怪有关问题
  详细解决方案

触发器中的奇怪有关问题

热度:45   发布时间:2016-04-27 15:29:09.0
触发器中的奇怪问题

下面是表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
  相关解决方案