菜鸟 请教触发器问题!!!!!!!急

wangrenda 2004-09-02 06:14:04
下面是我的触发器,本来不能触发,我想用print'xxx'输出来看看是那里的问题,可是当我加上后居然就可以触发了,
然后我将print'xxx'删除后,又不能用了我感觉是不是@FaPiaoType用的不对啊,
请各位大侠指点迷津!!

alter TRIGGER PJGL_rukut_YingShouPiaoALL_trigger ON PJGL_RuKuDan_Zong
FOR INSERT, UPDATE
AS
declare @Flag nvarchar,@YingFuKuanSum decimal,@UnitID nvarchar(200),@ShouPiaoJinEAll decimal,@YingShouPiaoJinEAll decimal,@YuJinE decimal,@YingShouPiaoJinEAll_Before decimal,@YuJinE_before decimal,
@FaPiaoType nvarchar(200),@RuKuDanID nvarchar(200)
if exists(select * from inserted)
Begin
select @Flag=inserted.rukuflag, @RuKuDanID=RuKuDanID from inserted
select TOP 1 @FaPiaoType=PJGL_JinHuoDan_Zong.FaPiaoType from PJGL_RuKuDan_MX,PJGL_JinHuoDan_Zong where PJGL_RuKuDan_MX.JinHuoID=PJGL_JinHuoDan_Zong.JinHuoID AND PJGL_RuKuDan_MX.RuKuDanID=@RuKuDanID
if update(rukuflag) and @Flag=N'是'and @FaPiaoType=N'增值税发票'
PRINT'444'
begin
select @UnitID=inserted.UnitID,@YingFuKuanSum=inserted.RuKuSum_JinE from inserted
if exists(select * from PJGL_YingShouPiao_All where UnitID=@UnitID)
begin
select @YingShouPiaoJinEAll_Before=YingShouPiaoJinEAll , @YuJinE_Before =YuJinE from PJGL_YingShouPiao_All where UnitID=@UnitID
select @YingShouPiaoJinEAll= @YingShouPiaoJinEAll_Before+@YingFuKuanSum
select @YuJinE=@YuJinE_Before+@YingFuKuanSum
update PJGL_YingShouPiao_All set YingShouPiaoJinEAll=@YingShouPiaoJinEAll,YuJinE=@YuJinE where(UnitID=@UnitID)
PRINT '11'
end
else
begin
select @ShouPiaoJinEAll=0
select @YingShouPiaoJinEAll=@YingFuKuanSum
select @YuJinE=@YingFuKuanSum
insert into PJGL_YingShouPiao_All (UnitID,ShouPiaoJinEAll,YingShouPiaoJinEAll,YuJinE)VALUES(@UnitID,@ShouPiaoJinEAll,@YingShouPiaoJinEAll,@YuJinE)
PRINT '222'
end
end
end
print @FaPiaoType



...全文
99 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangrenda 2004-09-02
  • 打赏
  • 举报
回复
唉,TMD找到原因了,触发器没问题
是我程序写的有问题,问题出在我先更新总表,然后才更新明细,而触发器用到明细的字段所以条件始终为false

wangrenda 2004-09-02
  • 打赏
  • 举报
回复
加上就是为了修改方便,没别的意思
wangrenda 2004-09-02
  • 打赏
  • 举报
回复
有,
我的意思就是让程序在查询分析器里面执行.
这样不是可以看到提示嘛
rouqu 2004-09-02
  • 打赏
  • 举报
回复
为什么要加触发器?你触发器事先没有吗?
wangrenda 2004-09-02
  • 打赏
  • 举报
回复
我觉的很奇怪
exec sp_executesql N'INSERT INTO PJGL_RuKuDan_Zong(RK_ID, RuKuDanID, RuKuDate, RuKuFlag, UnitID, RuKuInfo, RuKuSum_Num, RuKuSum_JinE, BuMen, JingBanRen) VALUES (@RK_ID, @RuKuDanID, @RuKuDate, @RuKuFlag, @UnitID, @RuKuInfo, @RuKuSum_Num, @RuKuSum_JinE, @BuMen, @JingBanRen)', N'@RK_ID int,@RuKuDanID nvarchar(50),@RuKuDate datetime,@RuKuFlag nvarchar(50),@UnitID nvarchar(50),@RuKuInfo nvarchar(50),@RuKuSum_Num decimal(18,0),@RuKuSum_JinE decimal(18,2),@BuMen nvarchar(50),@JingBanRen nvarchar(50)', @RK_ID = 13, @RuKuDanID = N'RK2004-9-2-013', @RuKuDate = '09 2 2004 12:00AM', @RuKuFlag = N'是', @UnitID = N'6666666666666', @RuKuInfo = N'', @RuKuSum_Num = 7, @RuKuSum_JinE = 25.00, @BuMen = N'部门类型1', @JingBanRen = N'王老二'

这个是我在时间探察器中的执行语句,执行过后并不触发,
而我把他COPY到查询分析器中,加上Go和我的触发器,就可以触发,这是为什么哪????
Go
deodarsydn 2004-09-02
  • 打赏
  • 举报
回复
你在if update(rukuflag) and @Flag=N'是'and @FaPiaoType=N'增值税发票'前加一段测试代码检查下看看:
print ' @Flag:'+isnull(@Flag,'无falag值')+ ' @FaPiaoType:'+isnull(@FaPiaoType,'无FaPiaoType值')
if update(rukuflag) and @Flag=N'是'and @FaPiaoType=N'增值税发票'
rouqu 2004-09-02
  • 打赏
  • 举报
回复
建议你打开事件探测器追踪
wangrenda 2004-09-02
  • 打赏
  • 举报
回复
确实是向楼上大侠说得那样,是那里条件的问题.
and @FaPiaoType=N'增值税发票' 就是他的问题,
可是我选择的记录确实该记录是"增值税发票",
还请帮我看看,取值,或语法有什么问题,
多谢
deodarsydn 2004-09-02
  • 打赏
  • 举报
回复
说明你的 update(rukuflag) and @Flag=N'是'and @FaPiaoType=N'增值税发票' 条件不成立
--:

if update(rukuflag) and @Flag=N'是'and @FaPiaoType=N'增值税发票'
PRINT'444'
begin --加了“PRINT'444'” 这儿就无条件执行了!!!
select
wangrenda 2004-09-02
  • 打赏
  • 举报
回复
up

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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