现在有三个表,分别是:category,news,comment
其中news表中的newsid是comment表中newsid关联的外键,category表中的cateid是news表中cateid关联的外键,现在想建一个存储过程按Category表中一个cateid来删除category中对应的一条数据,并连同news表中cateid对应数据删除,comment表中关联了news表中newsid那些数据也删除了,那么这个存储过程应该怎么写?触发器也可以!请高手帮助

解决方案 »

  1.   

    如果外键约束建立的正确,那么只要删除Category表中的数据,级联的数据就会被删除.
    如果非要用存储过程来实现,可以这样:
    CREATE PROC DELETERECORDS
        (
            @CategoryID as int
        )
    AS
    BEGIN
        BEGIN TRAN
            DELETE FROM comment WHERE newsid IN (SELECT newsid FROM NEWS WHERE cateid =@CategoryID)
            IF @@ERROR <> 0 
                ROLLBACK TRAN
            ELSE
                COMMIT TRAN
            DELETE FROM category WHERE  cateid =@CategoryID
            IF @@ERROR <> 0 
                ROLLBACK TRAN
            ELSE
                COMMIT TRAN
    END
      

  2.   

    用级联删除alter table 表名
    add constraint 外键名
    foreign key(字段名) references 主表名(字段名)
    on delete cascade