怎么调试触发器

feixuyue 2011-08-05 04:08:13
写了个触发器,为什么我插入数据的时候,触发器没有反应?

ALTER trigger PSL
on [PointCoord]
for insert
as
declare
@LPP varchar(30),
@RPP varchar(30),
@Name varchar(30),
@Nop int,
@SL float,
@SLL float,
@SLD float,
@SLDD float,
@SLDDL float,
@LPN varchar(30),
@RPN varchar(30),
@LX float,
@LY float,
@LZ float,
@RX float,
@RY float,
@RZ float;
begin
set @LPP='LK'
set @RPP='RK'

Select @Name = PointName,@Nop = Nop From inserted;
if CHARINDEX(@LPP,@Name)<>0
begin
Select top 1 @LPN = PointName,@LX = X,@LY = Y,@LZ=Z
From [PointCoord]
Where Nop=@Nop And PointName = @LPP + RIGHT(@Name,Len(@Name)-Len(@LPP))
end
else if CHARINDEX(@RPP,@Name)<>0
begin
Select top 1 @LPN = PointName,@LX = X,@LY = Y,@LZ=Z
From [PointCoord]
Where Nop=@Nop And PointName = @RPP + RIGHT(@Name,Len(@Name)-Len(@RPP))
end
else
return

if (@LPN <> null and @LPN <> null)
begin
set @SL=SQRT(SQUARE(@LX-@RX)+SQUARE(@LY-@RY)+SQUARE(@LZ-@RZ))
if (@Nop = 1)
begin
set @SLD=0
set @SLDD=0
end
else
begin
declare @i int;
set @i=@Nop
while(@i>0)
begin
set @i=@i-1
Select top 1 @SLL = ShouLian,@SLDDL = TotalSLDiff
From [ShouLian]
Where Nop = @i And ( LeftPointName = @Name or RightPointName = @Name )
if @SLL <> null
break
end
set @SLD=@SL-@SLL
set @SLDD=@SLDDL+@SLD
end
Insert Into [ShouLian] (LeftPointName,RightPointName,Nop,ShouLian,TheSLDiff,TotalSLDiff,MeasureTime)
Values (@LPN,@RPN,@Nop,@SL,@SLD,@SLDD,GETDATE())
end
end
...全文
355 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
feixuyue 2011-08-06
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 jamespanjunwei 的回复:]

条件应该是
if (@LPN IS NOT null) or (@LPN IS NOT null)
[/Quote]
是这里错了
搞定了
chuanzhang5687 2011-08-05
  • 打赏
  • 举报
回复
可以分段插入select 1 或print 1,2 之类的调试一下,看一下哪一段出错了
feixuyue 2011-08-05
  • 打赏
  • 举报
回复
我试试
老潘 2011-08-05
  • 打赏
  • 举报
回复
条件应该是
if (@LPN IS NOT null) or (@LPN IS NOT null)

老潘 2011-08-05
  • 打赏
  • 举报
回复
在查询分析器里面运行个INSERT INTO [PointCoord] VALUES(...)看看效果
if (@LPN <> null and @LPN <> null)
这个换成
if (@LPN IS NOT null) and (@LPN IS NOT null)

试试
feixuyue 2011-08-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 acherat 的回复:]

看你触发的时候具体怎么处理的,然后插入一些特别的数据来验证。
[/Quote]
我的这个只要插入数据就应该运行的,如果[pointcoord]数据库有一对数据的话,就应该有结果的
feixuyue 2011-08-05
  • 打赏
  • 举报
回复
但是要么写到程序里去,要么使用触发器,但是我觉得触发器简单点
-晴天 2011-08-05
  • 打赏
  • 举报
回复
建议楼主不要写这么复杂的触发器,否则,在你的数据库访问量增大的时候,你会因一些莫名其妙的问题而后悔的.
AcHerat 2011-08-05
  • 打赏
  • 举报
回复
看你触发的时候具体怎么处理的,然后插入一些特别的数据来验证。

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧