如何删除一个表中的50%的记录?或者80%,因为要做演示不可能用太大的数据

解决方案 »

  1.   

    delete t
    where id in (select top 50 percent  id  from t)
      

  2.   

    delete t
    where 关键字 in (select top 80 percent  关键字  from t)
      

  3.   

    如果没有关键字alter table t
    add id int identity(1,1)
      

  4.   

    楼上这种写法,是基于每个表都有ID唯一字段的。但实际中,不一定每个表都有唯一的ID字段。更何况,如果业务数据有一个前后的对应关系,这样删除会导致演示数据脱节。如:采购订单数据和收货单数据,严谨的讲,演示数据的每个收货单也应该有订单。
      

  5.   

    如何删除一个表中的80%的记录declare @int int
    select @int = count(*) * 0.8 from [一个表]--取的表内80%数据的个数
    print @int
    exec('delete top (' + @int + ')[一个表]) ')以上语句如果在Sql2005中执行可以写的更简单
    delete top (select count(*) * 0.8 from [一个表] ) [一个表]
      

  6.   

    --SQL Server 2000下
    --如何删除一个表中的80%的记录declare @int int, @sql varchar(8000)select @int = count(*) * 0.8 from 表名  --取的表内80%数据的个数print @intset @sql = 'set rowcount ' + cast(@int as varchar(100)) + ' delete 表名 '
    exec (@sql)
      

  7.   

    wangtiecheng:
    如果业务数据有一个前后的对应关系,这样删除会导致演示数据脱节。-------------
    說得對,但你這樣寫
    select @int = count(*) * 0.8 from 表名  --取的表内80%数据的个数print @intset @sql = 'set rowcount ' + cast(@int as varchar(100)) + ' delete 表名 '
    exec (@sql)
    count(*) * 0.8 ,也同樣是隨機的,如果這樣刪除,也一樣会导致演示数据脱节