select where>2008年的 into 新表改表名

解决方案 »

  1.   

    我想给正式数据库减肥,INTO到新表不行啊。
      

  2.   

    --得到数据库中所有表的空间/记录情况
    create table #tb(表名 sysname,记录数 int
    ,保留空间 varchar(10),使用空间 varchar(10)
    ,索引使用空间 varchar(10),未用空间 varchar(10))insert into #tb exec sp_MSForEachTable 'EXEC sp_spaceused ''?'''select * from #tb
    order by cast(left(使用空间,len(使用空间)-3) as numeric)drop table #tb从上面得到哪个表占用空间最大?可以考虑把大表的数据删除或转移,
    下一步要进行的动作是收缩数据和收缩表,尽量晚上空闲时间做收缩
    压缩数据库:
    DBCC SHRINKDATABASE (数据库名)压缩表:
    DBCC UPDATEUSAGE ('数据库名', '表名', '表主键')
      

  3.   

    李永良  在信息化建设过程中,随着技术的发展,原有的信息系统不断被功能更强大的新系统所取代。从两层结构到三层结构,从Client/Server到Browser/Server。在新旧系统的切换过程中,必然要面临一个数据迁移的问题。   数据迁移的概念   原有的旧系统从启用到被新系统取代,在其使用期间往往积累了大量珍贵的历史数据,其中许多历史数据都是新系统顺利启用所必须的。另外,这些历史数据也是进行决策分析的重要依据。数据迁移,就是将这些历史数据进行清洗、转换,并装载到新系统中的过程。数据迁移主要适用于一套旧系统切换到另一套新系统,或多套旧系统切换到同一套新系统时,需要将旧系统中的历史数据转换到新系统中的情况。银行、电信、税务、工商、保险以及销售等领域发生系统切换时,一般都需要进行数据迁移。对于多对一的情况,例如由于信息化建设的先后,造成有多个不同的系统同时运行,但相互间不能做到有效信息共享,所以就需要一套新系统包容几套旧系统的问题。   数据迁移对系统切换乃至新系统的运行有着十分重要的意义。数据迁移的质量不光是新系统成功上线的重要前提,同时也是新系统今后稳定运行的有力保障。如果数据迁移失败,新系统将不能正常启用;如果数据迁移的质量较差,没能屏蔽全部的垃圾数据,对新系统将会造成很大的隐患,新系统一旦访问这些垃圾数据,可能会由这些垃圾数据产生新的错误数据,严重时还会导致系统异常。   相反,成功的数据迁移可以有效地保障新系统的顺利运行,能够继承珍贵的历史数据。因为无论对于一个公司还是一个部门,历史数据无疑都是十分珍贵的一种资源。例如公司的客户信息、银行的存款记录、税务部门的纳税资料等。 
    转自:http://tech.c114.net/501/a239340.html--------------------------------------------------------
    我就是想实现这样的功能。该如何弄呢?还有正式库运行的时候可能表结构,视图,函数,触发器,存储过程等有可能会变化,如何让历史数据库和正式运行库结构一致呢?
      

  4.   

    --得到数据库中所有表的空间/记录情况 
    create table #tb(表名 sysname,记录数 int 
    ,保留空间 varchar(10),使用空间 varchar(10) 
    ,索引使用空间 varchar(10),未用空间 varchar(10)) insert into #tb exec sp_MSForEachTable 'EXEC sp_spaceused ''?''' select * from #tb 
    order by cast(left(使用空间,len(使用空间)-3) as numeric) drop table #tb 从上面得到哪个表占用空间最大?可以考虑把大表的数据删除或转移, 
    下一步要进行的动作是收缩数据和收缩表,尽量晚上空闲时间做收缩 
    压缩数据库: 
    DBCC SHRINKDATABASE (数据库名) 压缩表: 
    DBCC UPDATEUSAGE ('数据库名', '表名', '表主键') 
    ---------------------------------------------------------------------------
    谢谢。你的方法确实非常好。不过我这边的需求可能比较麻烦些。谢谢啊。
      

  5.   

    仅供参考: 
    1、在现在的库上生成建库角本 
    2、用脚本生成新库 
    3、从老库中把2008-1-1后的数据导入到新库中 
    4、启用新库即可
    -------------------------------------------------
    谢谢 happyflystone , 我们的库有很多外键约束,比如 A是主表, B依赖 A,C依赖B
    直接导入数据可能会出问题。而且那样还得整理出来最所有表之间的级联关系。。
      

  6.   

    --因为不知道你数据库表的具体情况,仅供参考。
    declare @tbname varchar(100),@sql varchar(8000)
    Declare Cur1 Cursor Local Read_Only Fast_Forward For
    --把主表名称改成你的主表表名
    select a.name from sysobjects a, syscolumns b where a.id=b.id and b.name='LAB_NUM' and a.xtype='u' and a.name<>'主表名称'
    Open  Cur1
    Fetch Next From Cur1 Into @tbname
    While @@Fetch_Status = 0 
    Begin
    Set @sql = 'delete '+@tbname+' where datediff(dd,日期字段,''2008-01-01'')>0'
    Execute(@sql)
    Fetch Next From Cur1 into @tbname
    End
    Close Cur1
    Deallocate Cur1--然后把主表2008年以前的数据删掉。--如果正式库又增大了,还是这样,把2008-01-01换成你要的日期就可以了。