zoukankan      html  css  js  c++  java
  • 回收数据表Ⅰ

      偶尔想做个SQL小实验,打开SQL Server Management Studio-->打开一数据库,里全乱七八糟的表一大堆,看着心烦,就想把里面的表全干掉.简单想了想,搞个循环来实现吧:   

     1 DECLARE @i INT,@rowCount INT,@TName VARCHAR(20);;  
     2 DECLARE @t TABLE(id INT IDENTITY,NAME VARCHAR(30));  
     3 
     4 SET NOCOUNT ON 
     5 
     6 INSERT INTO @t  SELECT a.name FROM sysobjects a 
     7                        INNER JOIN  sysindexes b
     8                        ON a.id=b.id AND a.xtype='U' 
     9                        AND b.indid<2 AND a.name<>'sysdiagrams'                        
    10   
    11 SET @rowCount=@@rowcount  
    12 SET @i=1  
    13 WHILE @i<=@rowCount  
    14 BEGIN    
    15     SELECT @TName=NAME FROM @t WHERE id=@i;      
    16     EXEC('DROP TABLE '+@TName)        
    17     SET @i=@i+1;  
    18 END
    19 
    20 SET NOCOUNT OFF

      执行,OK!

      有木有更简单的方式呢?答案是肯定的,SQL为我们预留了很多系统级的存储过程,有时候偷偷用用也不错,用sp_MSforeachtable来做这件事情就很省事,一行代码就可以搞定:

    1 EXEC sp_MSforeachtable 'DROP TABLE  ?'

       这个存储过程的使用方式还有很多,这里就不瞎说了,有兴趣的 Baidu 一下,资料有很多。

      看到这里有的朋友不禁要说了,这个傻帽,干掉所有的表哪要这么麻烦,直接干掉库不更省事?……,其实上面的方式原本是用在 TRUNCATE TABLE 上的,这里我不过临时征用一下。当然上面的方式也不是没有问题,比方有外键约束的时候执行会抛出异常。哈哈,我在建表的时候不太喜欢使用约束,这个问题我就自动无视了。后面的Blog中我会贴出有约束、外键的情况,这些完全不是问题。

  • 相关阅读:
    hdu1251统计难题(trie树)
    线段树
    poj2632Crashing Robots
    UVA10194 Football (aka Soccer)
    hdu1166敌兵布阵(线段树)
    【洛谷P3810】【模板】三维偏序(陌上花开)
    【洛谷P2480】古代猪文
    【洛谷P3449】PALPalindromes
    【洛谷P4777】扩展中国剩余定理(EXCRT)
    【洛谷P2421】荒岛野人
  • 原文地址:https://www.cnblogs.com/mfkaudx/p/3365494.html
Copyright © 2011-2022 走看看