大家好,基于昨天我提问过的问题,.后来还是没弄好.请再帮帮忙.-----------------统计表(Statistics)-----------
StatisticsID    WebArticleNumber(全站文章总数) 
1              20 
--------------------------------------------- -----------------个人表(Personal)----------
ID  UserName  ArticleNumber(个人文章总数) 
1    "aaaaa"    6 
2    "bbbbb"    7
3    "ccccc"    7 
------------------------------------------ -----------------文章分类表(ArticleType)-----
TypeID ID UserName TypeNumber(分类的文章数量) 
1      1  "aaaaa"     4 
2      1  "aaaaa"     2 
3      2  "bbbbb"     3 
4      2  "bbbbb"     1
5      2  "bbbbb"     1 
6      2  "bbbbb"     2
7      3  "ccccc"     2 
8      3  "ccccc"     1
9      3  "ccccc"     2
10     3  "ccccc"     2 
-------------------------------------------
-----------------文章表(Article)------------------- 
ArticleID TypeID ID UserName ArticleTitle
1           1   1  'aaaaa'   'fasfafs'
2           1   1  'aaaaa'   'fasfdfyer'
3           1   1  'aaaaa'   'hjuiassssssssssdahabn'
4           1   1  'aaaaa'   'fweeeeeeeeeeeeeafxcccccccccc'
5           2   1  'aaaaa'   'hjuiassssssssssdahabn'
6           2   1  'aaaaa'   'hjuiassdahabn'
7           3   2  'bbbbb'   '撒啊撒擦亮眼睛'
8           3   2  'bbbbb'   '挖墙角'
9           3   2  'bbbbb'   '啊亽他山之石'
10          4   2  'bbbbb'   'hjuiarrrrrrsadsdsdahabn'
11          5   2  'bbbbb'   '屗哈噶发西撒播'
12          6   2  'bbbbb'   '啊'
13          6   2  'bbbbb'   '阿昌大案要案'
14          7   3  'ccccc'   '屗哈达'
15          7   3  'ccccc'   'hjuiarrrrr啊dahabn'
16          8   3  'ccccc'   '撒手不管'
17          9   3  'ccccc'   '挖掘潜力'
18          9   3  'ccccc'   '瑁撒手发表声明'
19          10  3  'ccccc'   '亽呀屗大包大揽'
20          10  3  'ccccc'   '撒发表文章'
---------------------------------------------
请问怎么建立触发器使得删除文章分类表中的某一条分类数据时,取得TypeNumber(分类的文章数量)的值, 
然后更新个人表和统计表,让它们分别减去TypeNumber(分类的文章数量)的值,例如删除 文章分类TypeID为2这一项,同时更新 个人表名为"aaaaa"的(TypeNumber个人文章总数)减去文章分类TypeID为2的分类的文章数量 还有统计表也要减去文章分类TypeID为2的分类的文章数量. 表中已经设置了关联的主键.当删除分类时,自动删除相关的文章.
能明白吗?不明白我再解释.
我把我建立的表帖出来:
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(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 table Article(ArticleID int NOT NULL IDENTITY(1,1) PRIMARY KEY CLUSTERED,
                     TypeID int foreign key references ArticleType(TypeID) ON DELETE CASCADE ,
                     ID int,
                     UserName varchar(20),
                     ArticleType 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 ID=(select top 1 ID 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 ID=(select top 1 ID from deleted);
  update [Statistics] set WebArticleNumber=WebArticleNumber-1 where StatisticsID=(select top 1 StatisticsID from deleted)
end
GO
insert [Statistics] values(0)
insert Personal values('aaaaa',0)
insert Personal values('bbbbb',0)
insert Personal values('ccccc',0)
insert ArticleType values(1,'aaaaa',0)
insert ArticleType values(1,'aaaaa',0)
insert ArticleType values(2,'bbbbb',0)
insert ArticleType values(2,'bbbbb',0)
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)
insert into Article values(1,1,'aaaaa','fasfafs')
insert into Article values(1,1,'aaaaa','fasfdfyer')
insert into Article values(1,1,'aaaaa','hjuiassssssssssdahabn')
insert into Article values(1,1,'aaaaa','fweeeeeeeeeeeeeafxcccccccccc')
insert into Article values(2,1,'aaaaa','hjuiassssssssssdahabn')
insert into Article values(2,1,'aaaaa','hjuiassdahabn')
insert into Article values(3,2,'bbbbb','撒啊撒擦亮眼睛')
insert into Article values(3,2,'bbbbb','挖墙角')
insert into Article values(3,2,'bbbbb','啊亽他山之石')
insert into Article values(4,2,'bbbbb','hjuiarrrrrrsadsdsdahabn')
insert into Article values(5,2,'bbbbb','屗哈噶发西撒播')
insert into Article values(6,2,'bbbbb','啊')
insert into Article values(6,2,'bbbbb','阿昌大案要案')
insert into Article values(7,3,'ccccc','屗哈达')
insert into Article values(7,3,'ccccc','hjuiarrrrr啊dahabn')
insert into Article values(8,3,'ccccc','撒手不管')
insert into Article values(9,3,'ccccc','挖掘潜力')
insert into Article values(9,3,'ccccc','瑁撒手发表声明')
insert into Article values(10,3,'ccccc','亽呀屗大包大揽')
insert into Article values(10,3,'ccccc','撒发表文章')
--delete ArticleType where typeid=2
select * from [Statistics]
select * from Personal
select * from ArticleType
select * from Article

解决方案 »

  1.   

    帮帮忙好吗?急啊.两天了,这个问题还没搞好.
    我知道添加文章和删除文章可以用一个触发器.只是删除分章分类的时候,就比较难办了.
    昨天jia_guijun写了这个,我照着上面的数据库测试了一下,不行.
    create trigger tri_ArticleType_Delete
        on ArticleType
        for Delete
    as
        update Personal set ArticleNumber=ArticleNumber-d.TypeNumber from Personal a join (select id,Username,sum(TypeNumber) TypeNumber from Deleted group by ID,UserName) d on a.id=d.id;
        update [Statistics] set WebArticleNumber=WebArticleNumber-(select sum(TypeNumber) from Deleted)
    出现的结果是.比如删除文章分类ID为2的.有4条数据.
    得不到想要的结果.
      

  2.   

    哦.是个人表的主键ID.添加数据时自动加1的.-----------------个人表(Personal)---------- 
    ID  UserName  ArticleNumber(个人文章总数) 
    1    "aaaaa"    6 
    2    "bbbbb"    7 
    3    "ccccc"    7 
    ------------------------------------------ 
      

  3.   


        create trigger tri_per on ArticleType for insert,update,delete
        as
              delete Personal from Personal a,deleted b where a.id=b.id
              insert into Personal select id,username,sum(TypeNumber) from ArticleType group by id,username          delete Statistics 
              insert into Statistics(WebArticleNumber) select sum(TypeNumber) from ArticleType
       go--这个不行吗?有什么问题?
      

  4.   

    ------------------------------------------------
    --  Author: liangCK 小梁 & angellan 兰儿
    --  Date  : 2009-05-21 17:19:12
    ------------------------------------------------
     
    --> 生成测试数据: [Statistics]
    IF OBJECT_ID('[Statistics]') IS NOT NULL DROP TABLE [Statistics]
    CREATE TABLE [Statistics] (StatisticsID INT,WebArticleNumber INT)
    INSERT INTO [Statistics]
    SELECT 1,20
     
    --> 生成测试数据: [Personal]
    IF OBJECT_ID('[Personal]') IS NOT NULL DROP TABLE [Personal]
    CREATE TABLE [Personal] (ID INT,UserName VARCHAR(5),ArticleNumber INT)
    INSERT INTO [Personal]
    SELECT 1,'aaaaa',6 UNION ALL
    SELECT 2,'bbbbb',7 UNION ALL
    SELECT 3,'ccccc',7
     
    --> 生成测试数据: [ArticleType]
    IF OBJECT_ID('[ArticleType]') IS NOT NULL DROP TABLE [ArticleType]
    CREATE TABLE [ArticleType] (TypeID INT,ID INT,UserName VARCHAR(5),TypeNumber INT)
    INSERT INTO [ArticleType]
    SELECT 1,1,'aaaaa',4 UNION ALL
    SELECT 2,1,'aaaaa',2 UNION ALL
    SELECT 3,2,'bbbbb',3 UNION ALL
    SELECT 4,2,'bbbbb',1 UNION ALL
    SELECT 5,2,'bbbbb',1 UNION ALL
    SELECT 6,2,'bbbbb',2 UNION ALL
    SELECT 7,3,'ccccc',2 UNION ALL
    SELECT 8,3,'ccccc',1 UNION ALL
    SELECT 9,3,'ccccc',2 UNION ALL
    SELECT 10,3,'ccccc',2
     
    --> 生成测试数据: [Article]
    IF OBJECT_ID('[Article]') IS NOT NULL DROP TABLE [Article]
    CREATE TABLE [Article] (ArticleID INT,TypeID INT,ID INT,UserName VARCHAR(5),ArticleTitle VARCHAR(28))
    INSERT INTO [Article]
    SELECT 1,1,1,'aaaaa','fasfafs' UNION ALL
    SELECT 2,1,1,'aaaaa','fasfdfyer' UNION ALL
    SELECT 3,1,1,'aaaaa','hjuiassssssssssdahabn' UNION ALL
    SELECT 4,1,1,'aaaaa','fweeeeeeeeeeeeeafxcccccccccc' UNION ALL
    SELECT 5,2,1,'aaaaa','hjuiassssssssssdahabn' UNION ALL
    SELECT 6,2,1,'aaaaa','hjuiassdahabn' UNION ALL
    SELECT 7,3,2,'bbbbb','撒啊撒擦亮眼睛' UNION ALL
    SELECT 8,3,2,'bbbbb','挖墙角' UNION ALL
    SELECT 9,3,2,'bbbbb','啊亽他山之石' UNION ALL
    SELECT 10,4,2,'bbbbb','hjuiarrrrrrsadsdsdahabn' UNION ALL
    SELECT 11,5,2,'bbbbb','屗哈噶发西撒播' UNION ALL
    SELECT 12,6,2,'bbbbb','啊' UNION ALL
    SELECT 13,6,2,'bbbbb','阿昌大案要案' UNION ALL
    SELECT 14,7,3,'ccccc','屗哈达' UNION ALL
    SELECT 15,7,3,'ccccc','hjuiarrrrr啊dahabn' UNION ALL
    SELECT 16,8,3,'ccccc','撒手不管' UNION ALL
    SELECT 17,9,3,'ccccc','挖掘潜力' UNION ALL
    SELECT 18,9,3,'ccccc','瑁撒手发表声明' UNION ALL
    SELECT 19,10,3,'ccccc','亽呀屗大包大揽' UNION ALL
    SELECT 20,10,3,'ccccc','撒发表文章'--SQL查询如下:
    GO--建立删除分类触发器:
    CREATE TRIGGER tr_ArticleType_delete
        ON ArticleType
    AFTER DELETE
    AS
        --删除文章
        DELETE A
        FROM Article AS A
            JOIN deleted AS B
        ON A.TypeID = B.TypeID
            AND A.ID = B.ID
            AND A.UserName = B.UserName;
            
        --更新用户文章数
        UPDATE A SET
             ArticleNumber = A.ArticleNumber - B.TypeNumber
        FROM Personal AS A
            JOIN (
                SELECT UserName,SUM(TypeNumber) AS TypeNumber
                FROM deleted
                GROUP BY UserName
            ) AS B
        ON A.UserName = B.UserName;
        
        --更新总的文章数
        UPDATE A SET
            WebArticleNumber = WebArticleNumber 
                               - (SELECT SUM(TypeNumber) FROM deleted)
        FROM [Statistics] AS A;
    GO--建立添加,删除文章表触发器
    CREATE TRIGGER tr_Article_insert_delete
        ON Article
    AFTER INSERT,DELETE
    AS
        IF NOT EXISTS(SELECT * FROM deleted)
           BEGIN
               UPDATE A SET
                   TypeNumber = A.TypeNumber + B.TypeNumber
               FROM ArticleType AS A
                   JOIN (
                       SELECT TypeID,COUNT(*) AS TypeNumber
                       FROM inserted
                       GROUP BY TypeID
                   ) AS B
               ON A.TypeID = B.TypeID;
           END
        ELSE
           BEGIN
               UPDATE A SET
                   TypeNumber = A.TypeNumber - B.TypeNumber
               FROM ArticleType AS A
                   JOIN (
                       SELECT TypeID,COUNT(*) AS TypeNumber
                       FROM deleted
                       GROUP BY TypeID
                   ) AS B
               ON A.TypeID = B.TypeID;
           END
    GODELETE ArticleType WHERE TypeID = 2;
    select * from [Statistics]
    select * from Personal
    select * from ArticleType
    select * from ArticleGO
    DROP TABLE [Statistics],Personal,ArticleType,Article;
      

  5.   

     liangCK 我是问你的文章分类表的ID列是什么意思?
    不好意思.文章分类表的ID列的是对应个人表的ID编号.因为创建用户名的时候,用户名是可以相同的,所以用ID来区分.
    不过这个可以更该.在注册的时候不让用户名重复就可以了.
    当时考虑的是以后查询文章和分类的时候可以这样ID=ID AND USERNAME=USERNAME
    不好意思.我是初学者,很多东西要向你们学习/.
      

  6.   

    测试是可以用.不过.
    -----------------统计表(Statistics)----------- 
    StatisticsID    WebArticleNumber(全站文章总数) 
    1              NULL
    这里为NULL,
    还有,我怎么对它们插入数据,
    insert Personal values('aaaaa',0) 
    insert ArticleType values(1,'aaaaa',0)
    insert into Article values(1,1,'aaaaa','fasfafs')
    这样插入数据不行.提示找不到表名.
    它们的主键ID不能自动累加.
    而且表与表之间没有关联.
      

  7.   

    josy谢谢你来看我的帖子.
    我的数据库上照上面那个建立的.有关联主键,主键ID是自动编号的.
    昨天你写的那个我试过了.删除文章分类的时候,比如删除分类ID为1的所有文章一共有4个,但得出的结果是删除了5个.
    而删除其他文章分类2的时候.一共有两条数据,个人表和统计表切减去3条,
      

  8.   

    ------------------------------------------------
    --  Author: liangCK 小梁 & angellan 兰儿
    --  Date  : 2009-05-21 17:19:12
    ------------------------------------------------
     
    --> 生成测试数据: [Statistics]
    IF OBJECT_ID('[Statistics]') IS NOT NULL DROP TABLE [Statistics]
    CREATE TABLE [Statistics] (StatisticsID INT,WebArticleNumber INT)
    INSERT INTO [Statistics]
    SELECT 1,20
     
    --> 生成测试数据: [Personal]
    IF OBJECT_ID('[Personal]') IS NOT NULL DROP TABLE [Personal]
    CREATE TABLE [Personal] (ID INT,UserName VARCHAR(5),ArticleNumber INT)
    INSERT INTO [Personal]
    SELECT 1,'aaaaa',6 UNION ALL
    SELECT 2,'bbbbb',7 UNION ALL
    SELECT 3,'ccccc',7
     
    --> 生成测试数据: [ArticleType]
    IF OBJECT_ID('[ArticleType]') IS NOT NULL DROP TABLE [ArticleType]
    CREATE TABLE [ArticleType] (TypeID INT,ID INT,UserName VARCHAR(5),TypeNumber INT)
    INSERT INTO [ArticleType]
    SELECT 1,1,'aaaaa',4 UNION ALL
    SELECT 2,1,'aaaaa',2 UNION ALL
    SELECT 3,2,'bbbbb',3 UNION ALL
    SELECT 4,2,'bbbbb',1 UNION ALL
    SELECT 5,2,'bbbbb',1 UNION ALL
    SELECT 6,2,'bbbbb',2 UNION ALL
    SELECT 7,3,'ccccc',2 UNION ALL
    SELECT 8,3,'ccccc',1 UNION ALL
    SELECT 9,3,'ccccc',2 UNION ALL
    SELECT 10,3,'ccccc',2
     
    --> 生成测试数据: [Article]
    IF OBJECT_ID('[Article]') IS NOT NULL DROP TABLE [Article]
    CREATE TABLE [Article] (ArticleID INT,TypeID INT,ID INT,UserName VARCHAR(5),ArticleTitle VARCHAR(28))
    INSERT INTO [Article]
    SELECT 1,1,1,'aaaaa','fasfafs' UNION ALL
    SELECT 2,1,1,'aaaaa','fasfdfyer' UNION ALL
    SELECT 3,1,1,'aaaaa','hjuiassssssssssdahabn' UNION ALL
    SELECT 4,1,1,'aaaaa','fweeeeeeeeeeeeeafxcccccccccc' UNION ALL
    SELECT 5,2,1,'aaaaa','hjuiassssssssssdahabn' UNION ALL
    SELECT 6,2,1,'aaaaa','hjuiassdahabn' UNION ALL
    SELECT 7,3,2,'bbbbb','撒啊撒擦亮眼睛' UNION ALL
    SELECT 8,3,2,'bbbbb','挖墙角' UNION ALL
    SELECT 9,3,2,'bbbbb','啊亽他山之石' UNION ALL
    SELECT 10,4,2,'bbbbb','hjuiarrrrrrsadsdsdahabn' UNION ALL
    SELECT 11,5,2,'bbbbb','屗哈噶发西撒播' UNION ALL
    SELECT 12,6,2,'bbbbb','啊' UNION ALL
    SELECT 13,6,2,'bbbbb','阿昌大案要案' UNION ALL
    SELECT 14,7,3,'ccccc','屗哈达' UNION ALL
    SELECT 15,7,3,'ccccc','hjuiarrrrr啊dahabn' UNION ALL
    SELECT 16,8,3,'ccccc','撒手不管' UNION ALL
    SELECT 17,9,3,'ccccc','挖掘潜力' UNION ALL
    SELECT 18,9,3,'ccccc','瑁撒手发表声明' UNION ALL
    SELECT 19,10,3,'ccccc','亽呀屗大包大揽' UNION ALL
    SELECT 20,10,3,'ccccc','撒发表文章'--SQL查询如下:
    GO--建立删除分类触发器:
    CREATE TRIGGER tr_ArticleType_delete
        ON ArticleType
    AFTER DELETE
    AS
        --删除文章
        DELETE A
        FROM Article AS A
            JOIN deleted AS B
        ON A.TypeID = B.TypeID
            AND A.ID = B.ID
            AND A.UserName = B.UserName;
            
        ----更新用户文章数
        --UPDATE A SET
             --ArticleNumber = A.ArticleNumber - B.TypeNumber
        --FROM Personal AS A
            --JOIN (
                --SELECT UserName,SUM(TypeNumber) AS TypeNumber
                --FROM deleted
                --GROUP BY UserName
            --) AS B
        --ON A.UserName = B.UserName;
        
        --更新总的文章数
        --UPDATE A SET
            --WebArticleNumber = ISNULL(WebArticleNumber,0)
                               --- (SELECT SUM(TypeNumber) FROM deleted)
        --FROM [Statistics] AS A;
    GO--建立添加,删除文章表触发器
    CREATE TRIGGER tr_Article_insert_delete
        ON Article
    AFTER INSERT,DELETE
    AS
        IF NOT EXISTS(SELECT * FROM deleted)
           BEGIN
               UPDATE A SET
                   TypeNumber = A.TypeNumber + B.TypeNumber
               FROM ArticleType AS A
                   JOIN (
                       SELECT TypeID,COUNT(*) AS TypeNumber
                       FROM inserted
                       GROUP BY TypeID
                   ) AS B
               ON A.TypeID = B.TypeID;
               
               UPDATE A SET
                   ArticleNumber = ISNULL(A.ArticleNumber,0) + B.ArticleNumber
               FROM Personal AS A
                   JOIN (
                       SELECT UserName,COUNT(*) AS ArticleNumber
                       FROM inserted
                       GROUP BY UserName
                   ) AS B
               ON A.UserName = B.UserName
               
               UPDATE [Statistics] SET
                   WebArticleNumber = ISNULL(WebArticleNumber,0)
                                     + (SELECT COUNT(*) FROM inserted);
                                     
           END
        ELSE
           BEGIN
               UPDATE A SET
                   TypeNumber = A.TypeNumber - B.TypeNumber
               FROM ArticleType AS A
                   JOIN (
                       SELECT TypeID,COUNT(*) AS TypeNumber
                       FROM deleted
                       GROUP BY TypeID
                   ) AS B
               ON A.TypeID = B.TypeID;
               
               UPDATE A SET
                   ArticleNumber = ISNULL(A.ArticleNumber,0) - B.ArticleNumber
               FROM Personal AS A
                   JOIN (
                       SELECT UserName,COUNT(*) AS ArticleNumber
                       FROM deleted
                       GROUP BY UserName
                   ) AS B
               ON A.UserName = B.UserName
               
               UPDATE [Statistics] SET
                   WebArticleNumber = ISNULL(WebArticleNumber,0)
                                     - (SELECT COUNT(*) FROM deleted);
           END
    GODELETE ArticleType WHERE TypeID = 2;
    DELETE Article WHERE ArticleID >10
    insert into Article values(21,1,1,'aaaaa','fasfafs') 
    select * from [Statistics]
    select * from Personal
    select * from ArticleType
    select * from ArticleGO
    DROP TABLE [Statistics],Personal,ArticleType,Article;
      

  9.   


    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
      

  10.   

    谢谢你们~~问题我已经解决了.
    多次测试不成功的原因,在于这样的表,不能让它们关联约束.也就是删除成功,但是插入数据不成功的原因.
    另一个重要的原因是,当删除一个分类的时候,例如这个分类有三条数据,然而删除的时候却减去得到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添加和删除文章的触发器可以将他们合在一起的.
      

  11.   

    开始结分了,人人有份.当然liangCK 要给多点分才行.他很努力帮我的.
    我QQ214485112希望能做为你们的好友.有空交流一下.我也爱好这一行.研究问题我觉得很有趣.