我要将数据库中所有表名为tmp_开头的表 一次全都删除内容
例如tmp_aaa
    tmp_bbb
    tmp_ccc
    tmp_...DELETE FROM TMP_AA
一次性循环处理

解决方案 »

  1.   

    以上使用数据库为 SQL2008R2
      

  2.   

    while也是循环,但是while每次循环可以是一个数据集,而游标只有一行,万不得已可以尝试改成while。对于嵌套类型的循环,首先建议使用CTE。对于你这个。貌似不需要做循环把?从sys.tables那里一次找出表名然后动态拼接成delete 语句就可以拉
      

  3.   


    declare @sql nvarchar(2000)
    set @sql=''
    select @sql=@sql+ ' delete from '+ name from sys.sysobjects where name like 'temp%'
    print @sql
    exec (@sql)
      

  4.   

    while 的循环性能不如游标
    无论那种都慢
    能不循环尽量不要用循环
      

  5.   

    DELETE 太慢了,用truncate来清除数据
    declare @sql varchar(max)
    set @sql=''
    select @sql=@sql+'truncate table '+name+';' from sys.tables where name like '%temp'
    exec(@sql)
      

  6.   

    [code sql]
    declare @sql nvarchar(4000) --改成了这样 还是提示 不够长
    --截取的最后的一段SQL :delete from tmp_111_mx delete from tmp_228_mx de
    --declare @sql varchar(8000) --改成了这样 也还是提示 不够长
    --截取的最后的一段SQL :delete from tmp_111_mx delete from tmp_228_mx deset @sql=''
    select @sql=@sql+ ' delete from '+ name from sys.sysobjects where name like 'temp%'
    print @sql
    exec (@sql)
    [/code]使用 annatrov 的方法 执行OK