| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 7599 人关注过本帖
标题:建立触发器后,不能像表中插入数据,是什么原因
取消只看楼主 加入收藏
jinzhengbe
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-3-30
结帖率:0
收藏
 问题点数:0 回复次数:4 
建立触发器后,不能像表中插入数据,是什么原因

USE [cai2016]
GO
/****** Object:  Trigger [dbo].[trigger_yunum]    Script Date: 2017/3/29 17:30:30 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
alter trigger [dbo].[trigger_yunum]
  on [dbo].[newmoo_case_cgxd]
   for  insert
  as
    BEGIN

    DECLARE @id bigint SELECT @id = id FROM INSERTED
    DECLARE @purchase_id varchar SELECT @purchase_id = purchase_id FROM INSERTED
    DECLARE @slength nvarchar SELECT @slength = slength FROM INSERTED
    DECLARE @engname nvarchar SELECT @engname = engname FROM INSERTED

    DECLARE @swidth nvarchar SELECT @swidth = swidth FROM INSERTED
    DECLARE @kehu_id bigint SELECT @kehu_id = kehu_id FROM INSERTED
    DECLARE @caseid bigint select @caseid =caseid FROM INSERTED
    DECLARE @productnum int SELECT @productnum = productnum FROM INSERTED
    DECLARE @pay numeric SELECT @pay = pay FROM INSERTED
    DECLARE @costprice numeric SELECT @costprice = costprice FROM INSERTED


    DECLARE @pid_p bigint select @pid_p =pid_p FROM INSERTED
    DECLARE @cz int SELECT @cz = cz FROM INSERTED
    DECLARE @productRemarks nvarchar SELECT @productremarks = productremarks FROM INSERTED
    DECLARE @weight numeric SELECT @weight = weight FROM INSERTED
   
    Update  a set a.overnum=(select a.id, a.overnum, a.oknum, a.yunum, b.caseid, b.productnum, b.ischeck, sum(b.productnum)  from newmoo_case a, newmoo_case_cgxd b where b.caseid=a.id and b.ischeck=3)
     

end


请问这个触发器设计的有问题么?
建立之后 表b就不能插入数据了啊
删除触发器后就能恢复正常。
搜索更多相关主题的帖子: Object insert 触发器 
2017-03-31 14:26
jinzhengbe
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-3-30
收藏
得分:0 
非常感谢版主的热心回答。 竟然写这么仔细, 感动了~~~~
2017-04-02 09:54
jinzhengbe
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-3-30
收藏
得分:0 
alter trigger [dbo].[newmoo_case_cgxd] --第1次运行时,create,
on [dbo].[newmoo_case_cgxd]
for insert
as
begin
  declare @caseid bigint
  select @caseid = caseid from inserted

  if exists(select id from newmoo_case where id=@caseid)
     begin     
       update a set a.overnum=b.productnum,end_date=getdate()
       from newmoo_case a,(select caseid,productnum=sum(productnum) from newmoo_case_cgxd where caseid=@caseid group by id) b
       where a.id=b.caseid
     end
  else
     begin
       insert into newmoo_case(id,overnum,end_date)
       select caseid,productnum,getdate() from inserted
     end
end

版主,我按照你的思路改了一下。但是还是有错误。
您能帮忙在指点一下么?
newmoo_case 是要更新的表
newmoo_case_cgxd是要插入数据的表, case表的id 和 case_cgxd表的caseid 是关联的。()


消息 8120,级别 16,状态 1,过程 newmoo_case_cgxd,第 13 行
选择列表中的列 'newmoo_case_cgxd.caseid' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
2017-04-02 11:14
jinzhengbe
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-3-30
收藏
得分:0 
alter trigger aaacgxd --第1次运行时,create,
on [dbo].[newmoo_case_cgxd]
for insert
as
begin
  declare @caseid bigint
  declare @ischeck int
  select @caseid = caseid from inserted
  select @ischeck = ischeck from inserted

  if exists(select id from newmoo_case where id=@caseid)
     begin     
       update a set a.overnum=b.productnum,end_date=getdate()
       from newmoo_case a,(select caseid,productnum=sum(productnum) from newmoo_case_cgxd  group by caseid) b
       where a.id=b.caseid and ischeck= '3'
     end
  else
     begin
       insert into newmoo_case(id,overnum,end_date)
       select caseid,productnum,getdate() from inserted
     end
end

 版主前辈,经过您的指点 和我的测试,代码已经改成上面的样子了。
但是结果还是有差异。 下面有附图,
我要的结果是 a.id=b.caseid 同时 ischeck= '3'
但是 测试结果是,如果 ischeck包含3,就会合计所有 相同id的 productnum (合计内容包含 ischeck 不能3的)
我要的是 只合计 ischeck=3的
还请您在指点一下 非常感谢

[local]1[/local]

[此贴子已经被作者于2017-4-2 14:48编辑过]

2017-04-02 14:46
jinzhengbe
Rank: 1
等 级:新手上路
帖 子:10
专家分:0
注 册:2012-3-30
收藏
得分:0 
已经解决了。谢谢版主前辈
2017-04-02 20:09
快速回复:建立触发器后,不能像表中插入数据,是什么原因
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.012877 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved