delete from x_Table where type='a';
提示不能删除多行?这咋弄 ? 就是要删除好几行啊

解决方案 »

  1.   

    for循环       循环删除  ...
    懂?
      

  2.   

    delete from x_Table where [type]='a'
    你这样写试试呢
      

  3.   

    delete from x_Table where [type]='a'
      

  4.   

    The following error occured while executing the query:
    Server: Msg 512, Level 16, State 1, Line 6
    子查询返回的值不止一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。 
    语句已终止。
      

  5.   


    你确定这个异常是因为 delete from x_Table where type='a'; 这一行?你肯定有写了触发器,而触发器代码有bug!
      

  6.   

    比如说,sql server的触发器中,deleted 是所有被删除的记录,而有些人总以为这个表中只有一条记录,设置select它然后赋值给触发器中的一个局部变量。遇到这样的程序,属于对deleted、inserted的完全误解问题,就好象我见过一些号称自己有1年工作经验的程序员结果连for循环都不太会使用、在if(){ ...; return;} 中硬说return只是跳出if判断而不是跳出整个过程,这时候你无法相信他写出的其它所有程序,只能一个一个重新写了。
      

  7.   

    delete from x_Table where type='a';
    正常情况可以删除,也许还有其他相关联的没有删除比如触发器
      

  8.   

    如果是这类触发器中的deleted理解问题,是很严重的问题,最好把你自己写过的所有触发器程序都重写一遍。
      

  9.   

    是有触发器 但是触发器一直运行正常啊
    USE [Hypnoz]
    GO
    /****** 对象:  Trigger [dbo].[Art_ReplyNum2]    脚本日期: 01/09/2011 17:43:57 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER trigger [dbo].[Art_ReplyNum2]
    on [dbo].[X_art1] 
    for delete
    as
    if (select ArtType from deleted)=0
    begin
    declare @at int
    set @at=(select ParentId from deleted)
    update x_art1
    set X_art1.ReplyNum=X_art1.ReplyNum-1
    from X_art1
    where X_art1.ArtId=@at
    end
    第二个
    USE [Hypnoz]
    GO
    /****** 对象:  Trigger [dbo].[Art_BoardNum2]    脚本日期: 01/09/2011 17:43:22 ******/
    SET ANSI_NULLS ON
    GO
    SET QUOTED_IDENTIFIER ON
    GO
    ALTER trigger [dbo].[Art_BoardNum2]
    on [dbo].[X_art1]
    for delete
    as
    declare @BId int,@at int,@new int
    set @at=(select BoardId from X_art1 where ArtId=(select ParentId from deleted))
    set @BId=(select BoardId from deleted)
    if (select ArtType from deleted)=1
    begin
    update x_board
    set x_board.ArticleNum=x_board.ArticleNum-1
    where x_board.BoardId=@BId
    set @new=(select ParentId from X_Board where BoardId=@BId)
    if(@new<>0)
    begin
    update x_board
    set x_board.ArticleNum=x_board.ArticleNum-1
    where x_board.BoardId=@new
    end
    end
    else
    begin
    update x_board
    set x_board.ReplyNum=x_board.ReplyNum-1
    where x_board.BoardId=@at
    set @new=(select ParentId from X_Board where BoardId=@at)
    if(@new<>0)
    begin
    update x_board
    set x_board.ReplyNum=x_board.ReplyNum-1
    where x_board.BoardId=@new
    end
    end
      

  10.   

    删除多行 写模糊查询delete from x_Table where type like '%a%';
      

  11.   

    你的触发器问题,当你一次删除多条记录的时候,你触发器的代码:
    set @at=(select ParentId from deleted)
    是错误的,deleted表中有多条记录
      

  12.   


    类似这位仁兄说的,这是个博客系统的,删除博客的时候,连同文章、相册之类的东东都一起删除的触发器,希望对你有用ALTER Trigger [SchoolBlog].[Trigger_del_Blogs]
    on [SchoolBlog].[Blogs]
    instead of delete 
    as
    BEGIN
    declare @Bg_Adress nvarchar(50)
    declare @countblog int
    declare @countAlbum int
       select @Bg_Adress =Bg_Adress from deleted
       
       delete from SchoolBlog.Blogrolls   ---删除博友
       where Bg_Adress=@Bg_Adress or Br_Adress=@Bg_Adressselect @countblog=count(*) from SchoolBlog.ArticleType where Bg_Adress=@Bg_Adress
    while (@countblog>0)
     begin
       delete from SchoolBlog.ArticleType  ----删除日志类型
       where Bg_Adress=@Bg_Adress
       set @countblog=@countblog-1
     end
    select @countAlbum=count(*) from SchoolBlog.Album where Bg_Adress=@Bg_Adress
    while (@countAlbum>0)
      begin
       delete from  SchoolBlog.Album   ----删除相册
       where Bg_Adress=@Bg_Adress
       set @countAlbum=@countAlbum-1
      end
    delete from  SchoolBlog.Files        -----删除文件
    where Bg_Adress=@Bg_Adress
    delete from SchoolBlog.MessageBoard   ----删除留言
    where Bg_Adress =@Bg_Adress
    delete from SchoolBlog.Blogs     ---删除博客
    where Bg_Adress=@Bg_Adress
    END