收录日期:2020/06/02 18:16:53 时间:2016/06/12 02:12:09 标签:基础类
有类别表(Class),一级分类和二级分类都在这张表里面(根据字段type=1为一级,2为二级),根据ParentID判断二级属于哪个一级.

有标题表(Title),每个标题有一个BigClassID(所属一级大类)和一个SmallClassID(二级小类),来自Class表的ID字段值.

还有一个图片表(Pic),目的是存放一个标题下的多张图片,用它的字段(TitleID)与Title表关联起来.

要求根据这些用SQLSERVER2000触发器自动统计Class表里的一个字段Titlenum(标题数量),用来自动统计某一个类别中有多少个标题,以及有多少张图片(这个已经实现,见下面的代码)

本人刚开始使用SQLSERVER,请帮忙将Titlenum的触发器实现,实现立即散分!!!!!!!


下面是统计Title表和Class表的Picnum(图片数量),还有统计Class表中的Titlenum用触发器怎样实现?????

CREATE TRIGGER [ins_pic] ON [dbo].[Pic] 
FOR INSERT
AS
declare @nTitleID int,@nBigClassID int,@nSmallClassID int
select @nTitleID=titleID from inserted 
select @nBigClassID=BigClassID,@nSmallClassID=SmallClassID from title where id=@nTitleID
update title set picnum=picnum+1 where id=@nTitleID
update class set  picnum=picnum+1 where id=@nBigClassID or id=@nSmallClassID

你的触发器有问题
建议看下
http://blog.csdn.net/Haiwer/archive/2007/07/30/1717206.aspx
讲了一些触发器编码需要注意的地方

http://blog.csdn.net/haiwer/archive/2007/07/27/1711398.aspx
与你需求的非常类似
写个触发器你参考下:
create trigger tr_Title
on Title
for insert,update,delete
as

set nocount on
update a
  set TitleNum=a.TitleNum+b.TitleNum           --b.membercount是这次操作的增量,可能为负数
from class a,(
select id,Type,sum(TitleNum) as TitleNum         --增量由统计得到
from (
select BigClassID as id,1 as type,1 as TitleNum   
from inserted        
union all
select SmallClassID as id,2 as type,1 as TitleNum   
from inserted        
union all
select BigClassID as id,1 as type,-1 as TitleNum   
from deleted        
union all
select SmallClassID as id,2 as type,-1 as TitleNum   
from deleted        
) as t
group by id,Type
having sum(TitleNum)<>0                              --只取<>0的数据减少更改的记录数
) as b
where a.id=b.id                             --连接条件
and a.type=b.type


go

有个注释没改
图片的建议改成如下

CREATE TRIGGER tr_Pic ON [dbo].[Pic] 
FOR INSERT,update,delete                       --应该考虑修改和删除的情况
AS
set nocount on
update a
  set PicNum=a.PicNum+b.PicNum           --b.PicNum是这次操作的增量,可能为负数
from class a,(
select id,Type,sum(PicNum) as PicNum         --增量由统计得到
from (
select t.BigClassID as id,1 as type,1 as PicNum   
from inserted i,title t where t.id=i.titleID
union all
select t.SmallClassID as id,2 as type,1 as PicNum   
from inserted i,title t where t.id=i.titleID
union all
select t.BigClassID as id,1 as type,-1 as PicNum   
from deleted i,title t where t.id=i.titleID        
union all
select t.SmallClassID as id,2 as type,-1 as PicNum   
from deleted i,title t where t.id=i.titleID        
) as t
group by id,Type
having sum(PicNum)<>0                              --只取<>0的数据减少更改的记录数
) as b
where a.id=b.id                             --连接条件
and a.type=b.type

update a
  set PicNum=a.PicNum+b.PicNum           --b.PicNum是这次操作的增量,可能为负数
from title a,(
select id,sum(PicNum) as PicNum         --增量由统计得到
from (
select titleID as id,1 as PicNum   
from inserted
union all
select titleID as id,-1 as PicNum   
from deleted
) as t
group by id
having sum(PicNum)<>0                              --只取<>0的数据减少更改的记录数
) as b
where a.id=b.id                             --连接条件


declare @nTitleID int,@nBigClassID int,@nSmallClassID int
select @nTitleID=titleID from inserted 
select @nBigClassID=BigClassID,@nSmallClassID=SmallClassID from title where id=@nTitleID
update title set picnum=picnum+1 where id=@nTitleID
update class set  picnum=picnum+1 where id=@nBigClassID or id=@nSmallClassID

go
图片的建议改成如下

CREATE TRIGGER tr_Pic ON [dbo].[Pic] 
FOR INSERT,update,delete                       --应该考虑修改和删除的情况
AS
set nocount on
update a
  set PicNum=a.PicNum+b.PicNum           --b.PicNum是这次操作的增量,可能为负数
from class a,(
select id,Type,sum(PicNum) as PicNum         --增量由统计得到
from (
select t.BigClassID as id,1 as type,1 as PicNum   
from inserted i,title t where t.id=i.titleID
union all
select t.SmallClassID as id,2 as type,1 as PicNum   
from inserted i,title t where t.id=i.titleID
union all
select t.BigClassID as id,1 as type,-1 as PicNum   
from deleted i,title t where t.id=i.titleID        
union all
select t.SmallClassID as id,2 as type,-1 as PicNum   
from deleted i,title t where t.id=i.titleID        
) as t
group by id,Type
having sum(PicNum)<>0                              --只取<>0的数据减少更改的记录数
) as b
where a.id=b.id                             --连接条件
and a.type=b.type

update a
  set PicNum=a.PicNum+b.PicNum           --b.PicNum是这次操作的增量,可能为负数
from title a,(
select id,sum(PicNum) as PicNum         --增量由统计得到
from (
select titleID as id,1 as PicNum   
from inserted
union all
select titleID as id,-1 as PicNum   
from deleted
) as t
group by id
having sum(PicNum)<>0                              --只取<>0的数据减少更改的记录数
) as b
where a.id=b.id                             --连接条件


go
Update好象不需要考虑啊,只需要考虑Insert和Delete就可以了??
来学习学习。

jquery treeview jsp异步加载节点源码 关于程序用到发短信的。。。 改来改去头都大了,麻烦帮我看看 哈哈,用了一个超绝的方法完成老总的建站任务! JAVA讨论群,可以给大家提供一个良好的互动方式 怎么实现事件触发事件? 大放分,下午结我昨天和今天发的贴子。 女人做购物站从傻瓜到入门经验 如何在flash中获取服务器时间 一个提取Cookie的问题 50 去简单SQL问题 关于Hibernate的小问题 怎样让toolbar的按钮响应鼠标左键的up事件? (100分)无法启动emctl start dbconsole 月MM!我是小可爱唷哦!!!!!!!!!!!!!!! 修改xml节点值 用bitblt画背景图不成功! 大家帮我看一下我的电脑硬件间的兼容性及整体性能分析 蔚少辉:向全国球迷道歉 09年国足将洗心革面 可能吗!? 如何通过asp在flash中获取服务器时间 JSP 读取内容页,怎么去掉样式啊? 学习php中,请教一个基础问题~谢谢,和连接数有关 com.microsoft.sqlserver.jdbc.SQLServerException: 将截断字符串或二进制数据。 SQL 2005 备份问题 每天备份,并且要保留一周时间的 元旦需要加班的进来领分了,我也加班……元旦快乐 讨论,你的项目中账号和密码在数据库中是加密存储的么? 一个BUG...不能到达的位置(79列) 讨论,你的项目中账号和密码在数据库中是加密存储的么? VS2005代码左边中出现一些汉字或符号,怎么去掉。 大写字母被浏览器强制转换为小写,是什么原因?