读书人

触发器中的奇怪有关问题

发布时间: 2012-01-19 20:57:58 作者: rapoo

触发器中的奇怪问题

下面是表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 

读书人网 >SQL Server

热点推荐