我以前做级联删除时,是建立的关系图,没有写过sql语句来实现级联,现在遇到需要用sql语言来实现了,但我不知道怎么写,哪位大哥帮下忙啊,谢谢!
文章表(主键为ArtNo),文章附件表(里面也有ArtNo),文章评论表(有ArtNo),文章浏览日志表(也有ArtNo),现在想如果删除文章表中的某一个ArtNo,只要其它三个表中任意一个表有相关的ArtNo记录的话都要被删除,没有的话就只删除文章表中的ArtNo,该怎么写sql语句啊?谢谢!

解决方案 »

  1.   


    #region 批量执行SQL语句
    protected static int ExecuteSqls(string[] strSQLs)
    {
    SqlConnection myCn=new SqlConnection(strConn);
    SqlCommand myCmd=new SqlCommand();
    int j=strSQLs.Length;
    try
    {
    myCn.Open();
    }
    catch(System.Data.SqlClient.SqlException e)
    {
    throw new Exception(e.Message);
    }
    SqlTransaction myTrans=myCn.BeginTransaction();
    try
    {
    myCmd.Connection=myCn;
    myCmd.Transaction=myTrans;
    foreach(string str in strSQLs)
    {
    myCmd.CommandText=str;
    myCmd.ExecuteNonQuery();
    }
    myTrans.Commit();
    return 0;
    }
    catch(System.Data.SqlClient.SqlException e)
    {
    myTrans.Rollback();
    throw new Exception(e.Message);
    }
    finally
    {
    myCmd.Dispose();
    myCn.Close();
    }
    }
    #endregionstring[] strs=new string[4];
    strs[0]="";
    strs[1]="";
    strs[2]="";
    strs[3]="";//你要执行的SQL语句
    ExecuteSqls(strs);
      

  2.   

    create table 文章附件表
    (
      ArtNO  varchar(20) not null --(外键)
    foreign key references 文章表(ArtNO)
    on update cascade on delete cascade
      )
    go
    级联更新和删除 另两个表类似
      

  3.   

    lengyubing_1983(zhongqy) ,,但我要把四个表写在一个存储过程里面,应该怎么写啊,老大?
    :CREATE proc ttttttt
    as
    @ArtNo  char(5)
    /------------------------/
    该怎么写这里啊,谢谢各位老大/-------------------------/
    goladOnTheBrinkOfRage(愤怒边缘的青年):有没有存储过程的啊老大?
      

  4.   

    SQL = "delete set from 表 where id in (select 标识 from relapse where ArtNo='" & *** & "')"
      

  5.   

    CREATE proc ttttttt
    as
    @ArtNo  char(5)
    /------------------------/
    Delete from 文章浏览日志表 where ArtNo = @ArtNo
    Delete from 文章评论表 where ArtNo = @ArtNo
    Delete from 文章附件表 where ArtNo = @ArtNo
    Delete from 文章表 where ArtNo = @ArtNo
    /-------------------------/
    go
      

  6.   

    create proc up_del
    @intArtNo int
    --@intArtNo 要删除列的主键
    as
    begin transaction
    --事务开始
    delete 文章表 where ArtNo=@intArtNo
    delete  文章附件表 where ArtNo=@intArtNo
    delete 文章评论表 where ArtNo=@intArtNo
    delete  文章浏览日志表 where ArtNo=@intArtNo
    --事务结束
    commit transaction
    return 0--删除成功
    rollback transaction
    return 1--出错
      

  7.   

    已经解决了,不过觉得方法太...
    有没有哪位大哥有更好的方法???
    我的解决方法:CREATE PROCEDURE funDel
    @chrArtNo char(5) --文章编号
    AS
    declare  @sArtNo1 int        
    declare  @sArtNo2 int       
    declare  @sArtNo3 int      
    begin
        set  @sArtNo1=(select count(ArtNo) from  ??  where  ArtNo=@chrArtNo)
        set  @sArtNo2=(select count(ArtNo) from  ??  where  ArtNo=@chrArtNo)
        set  @sArtNo3=(select count(ArtNo) from  ??  where  ArtNo=@chrArtNo)
        if(@sArtNo1>0 or @sArtNo2>0  or @sArtNo3>0)
        begin
           delete  from  ??   where  ArtNo=@chrArtNo
           delete  from  ??   where  ArtNo=@chrArtNo
           delete  from   ??  where  ArtNo=@chrArtNo
           delete  from   ??  where  ArtNo=@chrArtNo
       end
    else
       begin
          delete  from   ??  where  ArtNo=@chrArtNo
       endend
    GO