取库中数据时同时删除数据的问题~~我把全部帖上来.大家帮我看看.拜拖了.
Create Database Blog
GO
Use Blog
GO
Create Table SpaceInformation--空间资料
(
SpaceInformationID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,--主键id
    UserName varchar(20) NOT NULL,--(主人)用户名
    PersonalArticleNumber int not null,--个人文章总数
    PersonalMoodNumber int not null,--个人心情总数
    PersonalMessageVersionNumber int not null,--个人留言总数
    PersonalTotalRecentVisitsNumber int NOT NULL,--个人总访问人数
)
GO
insert into SpaceInformation values('haohaoxiao',0,0,0,0)
insert into SpaceInformation values('214485112',0,0,0,0)
GO
Create table StatisticsNumber--统计总数
(
    StatisticsNumberID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,--主键id
    WebArticleNumber int not null,--全站文章总数
    WebMoodNumber int not null,--全站心情总数
    WebMessageVersionNumber int not null,--全站留言总数
    WebNumber int not null,--全站总访问人数
)
GO
insert into StatisticsNumber values(0,0,0,0)
GO
create table ArticleType--文章类别
(
    ArticleTypeID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,--文章分类id
    SpaceInformationID int foreign key references SpaceInformation(SpaceInformationID) ON DELETE CASCADE ,--关联空间资料主键id
    UserName varchar(20) NOT NULL,--(主人)用户名
ArticleTypeName varchar(20) NOT NULL,--文章分类名称
    ArticleTypeNumber int not null,--文章分类总数(分类的文章数目)
)
GO
insert into ArticleType values(1,'haohaoxiao','shiaosd',0)
insert into ArticleType values(1,'haohaoxiao','ashdaioshd',0)
insert into ArticleType values(2,'214485112','jhauiofha',0)
insert into ArticleType values(2,'214485112','hjuihabn',0)
GO
create table Article--文章
(
    ArticleID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,--文章id
    ArticleTypeID int foreign key references ArticleType(ArticleTypeID) ON DELETE CASCADE ,--关联文章分类id
    SpaceInformationID int not null,--空间资料主键id
    UserName varchar(20) NOT NULL,--(主人)用户名
ArticleTypeDateTime varchar(50) NOT NULL,--文章标题
)
GO
-------------------------------------文章触发器----------------------------------
----//增加//----
create trigger updateArticleType--更新文章类别
on Article
for insert
as
begin
  update ArticleType set ArticleTypeNumber=ArticleTypeNumber+1 where ArticleTypeID=(select top 1 ArticleTypeID from inserted)
end
GOcreate trigger updateSpaceInformation--更新空间资料
on Article
for insert
as
begin
  update SpaceInformation set PersonalArticleNumber=PersonalArticleNumber+1 where SpaceInformationID=(select top 1 SpaceInformationID from inserted)
end
GOcreate trigger updateStatisticsNumber--更新统计总数
on Article
for insert
as
begin
  update StatisticsNumber set WebArticleNumber=WebArticleNumber+1 where StatisticsNumberID=(select top 1 StatisticsNumberID from inserted)
end
GO----//减少//----
create trigger deleteArticleType--更新文章类别
on Article
for delete
as
begin
  update ArticleType set ArticleTypeNumber=ArticleTypeNumber-1 where ArticleTypeID=(select top 1 ArticleTypeID from deleted)
endGO
create trigger deleteSpaceInformation--更新空间资料
on Article
for delete
as
begin
  update SpaceInformation set PersonalArticleNumber=PersonalArticleNumber-1 where SpaceInformationID=(select top 1 SpaceInformationID from deleted)
end
GOcreate trigger deleteStatisticsNumber--更新统计总数
on Article
for delete
as
begin
  update StatisticsNumber set WebArticleNumber=WebArticleNumber-1 where StatisticsNumberID=(select top 1 StatisticsNumberID from deleted)
end
GO----//删除文章类别//----
create trigger deleteSpaceInformationArticleType--更新空间资料
on ArticleType
for delete
as
declare @aa int
begin
  select @aa=ArticleTypeNumber from ArticleType where ArticleTypeID=ArticleTypeID and SpaceInformationID=SpaceInformationID and UserName=UserName;
  update SpaceInformation set PersonalArticleNumber=PersonalArticleNumber-@aa where SpaceInformationID=(select top 1 SpaceInformationID from deleted)
end
GO
create trigger deleteStatisticsNumberArticleType--更新统计总数
on ArticleType
for delete
as
declare @bb int
begin
  select @bb=ArticleTypeNumber from ArticleType where ArticleTypeID=ArticleTypeID and SpaceInformationID=SpaceInformationID and UserName=UserName;
  update StatisticsNumber set WebArticleNumber=WebArticleNumber-@bb where StatisticsNumberID=(select top 1 StatisticsNumberID from deleted)
end
-------------------------------------触发器结束-----------------------------------
GO
insert into Article values(4,2,'214485112','fasfafs')
insert into Article values(4,2,'214485112','fasfdfyer')
insert into Article values(3,2,'214485112','hjuiassssssssssdahabn')
insert into Article values(3,2,'214485112','fweeeeeeeeeeeeeafxcccccccccc')
insert into Article values(2,1,'haohaoxiao','hjuiassssssssssdahabn')
insert into Article values(1,1,'haohaoxiao','hjuiassdahabn')
insert into Article values(1,1,'haohaoxiao','hjuiarrrrrrsadsdsdahabn')
--delete Article where ArticleID=7
--delete ArticleType where ArticleTypeID=2
delete ArticleType where ArticleTypeID=3

解决方案 »

  1.   

    打开SQL运行即可,
    其中我测试时,当删除文章分类的时候,
    执行删除
    delete ArticleType where ArticleTypeID=2 
    delete ArticleType where ArticleTypeID=3
    StatisticsNumber--统计总数 和 SpaceInformation--空间资料 
    这两个表里的两个字段不能达到预期效果.个人文章总数和全站文章总数 的值有问题.
      

  2.   

    跪求高手帮看看,这个问题,我一晚都没睡了.比如删除ArticleTypeID=3这个文章分类
    insert into Article values(4,2,'214485112','fasfafs') 
    insert into Article values(4,2,'214485112','fasfdfyer') 
    insert into Article values(3,2,'214485112','hjuiassssssssssdahabn') --------------即删除这两行
    insert into Article values(3,2,'214485112','fweeeeeeeeeeeeeafxcccccccccc') -------即删除这两行
    insert into Article values(2,1,'haohaoxiao','hjuiassssssssssdahabn') 
    insert into Article values(1,1,'haohaoxiao','hjuiassdahabn') 
    insert into Article values(1,1,'haohaoxiao','hjuiarrrrrrsadsdsdahabn')
    需要得到的
    StatisticsNumber--统计总数 和 PersonalArticleNumber--个人文章总数
    分别减去ArticleTypeID=3文章分类里所有的文章数的剩余
      

  3.   


    Create table [Statistics](StatisticsID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED, 
                              WebArticleNumber int) 
    go 
    create table Personal(ID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED, 
                          UserName varchar(10), 
                          ArticleNumber int) 
    go 
    create table ArticleType(TypeID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED, 
                            ID int foreign key references Personal(ID) ON DELETE CASCADE , 
                            UserName varchar(10), 
                            TypeNumber int) 
    GO 
    create trigger tri_per on ArticleType after insert,update,delete
    as
        update Personal set ArticleNumber=ArticleNumber-b.s
        from Personal a,(select id,s=sum(TypeNumber) from deleted group by id)b
        where a.id=b.id    update Personal set ArticleNumber=b.s
        from Personal a,(select id,s=sum(TypeNumber) from ArticleType where id in(select id from inserted) group by id)b
        where a.id=b.id
        
        update [Statistics] set WebArticleNumber=(select sum(TypeNumber) from ArticleType)
    goinsert [Statistics] values(0) 
    insert Personal values('aaaaa',0) 
    insert Personal values('bbbbb',0) 
    insert Personal values('ccccc',0) 
    insert ArticleType values(1,'aaaaa',2) 
    insert ArticleType values(1,'aaaaa',3) 
    insert ArticleType values(2,'bbbbb',4) 
    insert ArticleType values(2,'bbbbb',5) 
    insert ArticleType values(2,'bbbbb',0) 
    insert ArticleType values(2,'bbbbb',0) 
    insert ArticleType values(3,'ccccc',0) 
    insert ArticleType values(3,'ccccc',0) 
    insert ArticleType values(3,'ccccc',0) 
    insert ArticleType values(3,'ccccc',0) 
    go
    --查看结果
    select * from [Statistics]
    select * from Personal
    select * from ArticleType
    go
    --删除
    delete ArticleType where typeid=4
    go--查看结果
    select * from [Statistics]
    select * from Personal
    select * from ArticleType
    go
      

  4.   

    这个问题的详细在这里:http://topic.csdn.net/u/20090521/17/13147271-a70e-4d57-8b32-ca05db551974.html?650276960谢谢你们~~问题我已经解决了. 
    多次测试不成功的原因,在于这样的表,不能让它们关联约束.也就是删除成功,但是插入数据不成功的原因. 
    另一个重要的原因是,当删除一个分类的时候,例如这个分类有三条数据,然而删除的时候却减去得到4条. 
    当删除文章分类时,触发器同时删除对应的文章.而执行到删除文章的时候.删除文章的触发器将执行一次删除操作. 
    哎~~连我自己都说乱了. 
    我把它帖出来.方便将来某些需要的人. 
    create database abcd 
    go 
    use abcd 
    go 
    Create table [Statistics](StatisticsID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED, 
                              WebArticleNumber int) 
    go 
    create table Personal(ID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED, 
                          UserName varchar(20), 
                          ArticleNumber int) 
    go 
    create table ArticleType(TypeID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED, 
                            UserName varchar(20), 
                            TypeNumber int) 
    go 
    create table Article(ArticleID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED, 
                        TypeID int, 
                        UserName varchar(20), 
                        ArticleTitle varchar(50)) 
    GO 
    ----//添加文章时//---- 
    create trigger updateArticle--更新分类/个人表/统计表 
    on Article 
    for insert 
    as 
    begin 
      update ArticleType set TypeNumber=TypeNumber+1 where TypeID=(select top 1 TypeID from inserted); 
      update Personal set ArticleNumber=ArticleNumber+1 where UserName=(select top 1 UserName from inserted); 
      update [Statistics] set WebArticleNumber=WebArticleNumber+1 where StatisticsID=(select top 1 StatisticsID from inserted) 
    end 
    GO 
    ----//删除文章时//---- 
    create trigger deleteArticle--更新分类/个人表/统计表 
    on Article 
    for delete 
    as 
    begin 
      update ArticleType set TypeNumber=TypeNumber-1 where TypeID=(select top 1 TypeID from deleted); 
      update Personal set ArticleNumber=ArticleNumber-1 where UserName=(select top 1 UserName from deleted); 
      update [Statistics] set WebArticleNumber=WebArticleNumber-1 where StatisticsID=(select top 1 StatisticsID from deleted) 
    end 
    GO 
    create trigger tri_per on ArticleType after delete 
    as 
        update Personal set ArticleNumber=(ArticleNumber-b.s+1) 
        from Personal a,(select UserName,s=sum(TypeNumber) from deleted group by UserName)b 
        where a.UserName=b.UserName 
        delete Article 
        from Article a,(select UserName,s=sum(TypeID) from deleted group by UserName)b 
        where a.UserName=b.UserName and a.TypeID=b.s 
        update [Statistics] set WebArticleNumber=(select sum(TypeNumber) from ArticleType) 
    go 
    insert [Statistics] values(0) 
    insert Personal values('aaaaa',0) 
    insert Personal values('bbbbb',0) 
    insert Personal values('ccccc',0) 
    insert ArticleType values('aaaaa',0) 
    insert ArticleType values('aaaaa',0) 
    insert ArticleType values('bbbbb',0) 
    insert ArticleType values('bbbbb',0) 
    insert ArticleType values('bbbbb',0) 
    insert ArticleType values('bbbbb',0) 
    insert ArticleType values('ccccc',0) 
    insert ArticleType values('ccccc',0) 
    insert ArticleType values('ccccc',0) 
    insert ArticleType values('ccccc',0) 
    insert ArticleType values('ccccc',0) 
    insert into Article values(1,'aaaaa','fasfafs') 
    insert into Article values(1,'aaaaa','fasfdfyer') 
    insert into Article values(1,'aaaaa','hjuiassssssssssdahabn') 
    insert into Article values(2,'aaaaa','saaaaaaaaaaaa') 
    insert into Article values(4,'bbbbb','hjuiarrrrrrsadadsssssssssdsdsdahabn') 
    insert into Article values(2,'aaaaa','hjuiassdahabn') 
    insert into Article values(3,'bbbbb','撒啊撒擦亮眼睛') 
    insert into Article values(3,'bbbbb','挖墙角') 
    insert into Article values(3,'bbbbb','啊亽他山之石') 
    insert into Article values(4,'bbbbb','hjuiarrrrrrsadsdsdahabn') 
    insert into Article values(5,'bbbbb','屗哈噶发西撒播') 
    insert into Article values(6,'bbbbb','啊') 
    insert into Article values(6,'bbbbb','阿昌大案要案') 
    insert into Article values(7,'ccccc','屗哈达') 
    insert into Article values(7,'ccccc','hjuiarrrrr啊dahabn') 
    insert into Article values(8,'ccccc','撒手不管') 
    insert into Article values(9,'ccccc','挖掘潜力') 
    insert into Article values(9,'ccccc','瑁撒手发表声明') 
    insert into Article values(10,'ccccc','亽呀屗大包大揽') 
    insert into Article values(10,'ccccc','撒发表文章') 
    insert into Article values(10,'ccccc','撒文章') 
    insert into Article values(11,'ccccc','文章') 
    insert into Article values(11,'ccccc','文章ssssss') 
    insert into Article values(9,'ccccc','瑁撒手发表dddddddd声明') 
    go 
    ------删除 
    delete ArticleType where typeid=2 
    ----查看结果 
    select * from [Statistics] 
    select * from Personal 
    select * from ArticleType 
    select * from Article 
    delete Article where ArticleID=1 添加和删除文章的触发器可以将他们合在一起的.
    以上的添加和删除都在SQL2005测试过.OK