select name from sysobjects where xtype='U' AND year(refdate)<2012
例如我要删除,多个表,建表时间小于2012年的。咋 个删除哦,

解决方案 »

  1.   


    declare @sql varchar(100)
    declare #cursor cursor for 
    select  name  from sysobjects where TYPE ='u' and year(crdate) < 2012
    open #cursor 
    fetch  next from #cursor into @sql
    while @@fetch_status =0
    begin
    exec ('drop table '+@sql)
    fetch  next from #cursor into @sql
    end 
    CLOSE #cursor
    DEALLOCATE #cursor
      

  2.   


    declare @tablename(20)
    declare @maxid int
    declare @minid int
    select @maxid=max(id) from 
    (select row_number(order by getdate()) as id,
    name from sysobjects where xtype='U' AND year(refdate)<2012)a
    select @minid=min(id) from 
    (select row_number(order by getdate()) as id,
    name from sysobjects where xtype='U' AND year(refdate)<2012)awhile @minid<=@maxid
    begin
    select @tablename=name from 
    (select row_number(order by getdate()) as id,
    name from sysobjects where xtype='U' AND year(refdate)<2012)a
    where id=@minid
    drop table @tablename
    set @minid=@minid+1
    end
      

  3.   

    delete from sysobjects where  xtype='U' AND year(refdate)<2012
      

  4.   

    擦,DELETE 删除,还有数据冗余呢?我要的是完全删除。
      

  5.   

    declare @c int
    declare @e int
    declare @t varchar(20)
    set @t='' 
    declare @f varchar(20)
    set @f=''
    set @c=0
     select  @e=count(name)  from sysobjects where TYPE ='u' and year(crdate) < 2012
     while @c<@e  
     begin
     select top 1  @t= name   from sysobjects where TYPE ='u' and year(crdate) < 2012
     exec ('drop table  ' + @t)
     set @c=@c+1
     end;
     
      
     
      

  6.   

    DECLARE @SQL VARCHAR(MAX)
    SELECT @SQL=ISNULL(@SQL+';','')+'DROP TABLE ['+NAME+']'
    FROM SYS.TABLES
    WHERE CREATE_DATE<'2012-1-1'
    PRINT @SQL
    --EXEC(@SQL)
      

  7.   

    自己先确认好输出的PRINT没问题,再把注释去掉就行了,删表还是保险一点。
      

  8.   


    set @c=@c+1  这是向下循环么。
      

  9.   

    稍微修改了下UU的
     DECLARE @SQL VARCHAR(MAX)
     select @SQL='DROP TABLE'
    SELECT @SQL=@SQL+ ' ['+NAME+']'+','
    FROM SYS.TABLES
    WHERE CREATE_DATE<'2012-1-1'
    PRINT (@SQL)
     EXEC(@SQL)
      

  10.   

    declare @s varchar(1000)
    select  @s=isnull(@s+',','')+name from sysobjects where xtype='U' 
    select @s='drop table '+@s
    exec(@s)
      

  11.   

    你这个最后会多个逗号,EXEC前要处理一下
    SELECT @SQL=@SQL+STUFF(@SQL,LEN(@SQL)-1,1,'')
    EXEC(@SQL)
      

  12.   

    那不是uu 那是 xx你这个要多个,的
      

  13.   

    最后处理一下就可以了,SELECT @SQL=LEFT(@SQL,LEN(@SQL)-1)
      

  14.   

    就是用动态拼接了 dorp table tb1,tb2,tb3哪里看不懂的直接说,这里的大哥哥大姐姐都会帮你们的。。嘎嘎
      

  15.   


    哈哈,大哥哥,大姐姐,好吧,我就問問动态的问题。SELECT @SQL=@SQL+ ' ['+NAME+']'+','
      中间的,'['+NAME+']' 中括号外面和里面的引号是对中括号操作吗?起啥作用哦!
      

  16.   


    DROP TABLE [avc], [geography], [tb_stuxs03], [sasa], [tb_stu04], [internet_sales], [tb_te04], [tb_stu08], [kk], [tb_book04], [kdkdk], [tb_tb04], [diff], [bb], [tb_astuinfo08], [tb_student05], [isi], [store_information], [sd], [customer], [oreders], [tb_astr_home], [tb_booksell06], [aa], [wage_table], [tb_], [replace_], [custommer], [tb_amese08], [table_name], [a_a], [tb_astr], [test_a], [tb_stu06], [tb_ware06], [checks], [saa], [sb], [tee], [DEPOSITS], [sc], [tb_sell07], [iid], [BIKES], [tb_sell], [AA_BB], [sdd], [tb_seller07], [transit], [checkss], [aad], [ORGCHART], [tb_student], [aads], [dd], [scs], [TABLE1], [coursee], [TABLE2], [tb_agoods], [CUSTOMER], [tb_abig], [PART], [tb_student09], [sa], [ORDERS], [tb_course09], [tabk], [AV], [teacher09], [tb_booksell07], [COLLECTIO], [test_1], [kak], [test_2], [sk], [AAA], [test_3], [tb_xsb03], [asa], [INVENTORY], [adc], [kasf], [TEMP], [BILLS], [aca], [aabb], [ak], [bills], [tb_sell09], [skk], [bank_accounts], [company], [tb_stuscore09], [tb_namployee09], [student], [teacher], [course], [tb_user], [ab], [tb_user1], [tb_user2], [tb_series09], [tb_info], [tb_privot20], [date1], [tb_unpivot10], [tb_client11], [aaid], [CUSTOMERS], [CSVTable], [CUSTOMERSS], [grade], [tb_grade12], [BALANCES], [tb_employee12], [SALARIES], [ALBUMS], [tb_particular], [ARTISTS], [ti], [MEDIA], [tes], [RECORDINGS], [aa<P], [aa_<o], [ds], [PRODUCTS], [dd_q], [adb], [kkd], [tk], [wage], [tb_stustudent03], [tb_stu07], [tb_student03], [tb_stuachi], [ueue], [ta], [ui], [es], [NewContact], [UI], [UIW], [tb_mid], [tb_car03], [test], [testtable1], [tb_num03], [tb_fin], [tb_stuindex03], [tb_em], [tb_apay08], [tb_booksale03], [tb_gzmx], [tb_shopping03], [tb_person03], [stuinfo03], [tb_classname04], [teast], [tb_userinfo], [t], [gen_file], [userpwd], [gem_file], [tb_yuan], [av], [函数], [avtv],
      我打印出来的结果是这样,我想问一下,里面动态语句后面拼接的豆号啥意思阿。还有,
    中间的'['+name+']',它是如何进行拆分的,原本是一个字段,怎么一打印出来,全成了表名。  后面的,from sys.tables  where create_date <2012-02-12 为何对打印的语句不影响。
    我的意思是说,为何对变量赋值的时候,它只拼接前面的,@sql+'['+name']', 而后面的from... 却没连接。当然,要的就是它不联接。这位哥哥,你可要回答下,我第一次接触动态的。指教指教吧。
      

  17.   


    哈哈,阿蒙哥你是没有说,引号的作用哦,麻烦解释一下。 还有,它是如何显示成一个个表名,而不是查询出来一个字段,是豆句的原因吗? 后面的,from sys.tables where create_date <2012-02-12 为何对打印的语句不影响。
    我的意思是说,为何对变量赋值的时候,它为何只拼接前面的,@sql+'['+name']', 而后面的from... 却没连接。当然,要的就是它不联接。 劳烦了。哈哈,
      

  18.   

    就是把name这列值动态拼接起来的意思。我也不知道怎么解释。实在不明白还的你自己体会多看下经典的动态行列转换  http://blog.csdn.net/szstephenzhou/article/details/7091819
      

  19.   


    OMG  还是阿蒙哥,热心阿。哈哈,结贴。