sql2005中清空所有表數據

MSSQL中如何用SQL清除所有表的數據

三種類型:
第一:只要數據庫中表是空的;
第二:表是空的,並且自增長列可以從1開始增長。
第三:表是空的,並且自增長列可以從1開始增長,而且存在表間的約束。

第一種類型:只要數據庫中表是空的

方法一:
Declare @t varchar (1024)
Declare @SQL varchar(2048)
Declare tbl_cur cursor for  select TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = ’BASE TABLE’
OPEN tbl_cur FETCH NEXT  from tbl_cur INTO @t

WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL=’TRUNCATE TABLE ’+ @t
–print (@SQL)
EXEC (@SQL)
FETCH NEXT  from tbl_cur INTO @t
END

CLOSE tbl_cur
DEALLOCATE tbl_Cur

方法二:

DECLARE @TableName VARCHAR(256)
DECLARE @varSQL VARCHAR(512)
DECLARE @getTBName CURSOR SET @getTBName = CURSOR FOR SELECT name FROM sys.Tables WHERE NAME NOT LIKE ’Category’

OPEN @getTBName FETCH NEXT FROM @getTBName INTO @TableName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @varSQL = ’Truncate table ’+ @TableName 

–PRINT (@varSQL)
EXEC (@varSQL)
FETCH NEXT FROM @getTBName INTO @TableName
END

CLOSE @getTBName
DEALLOCATE @getTBName

方法三:

Declare @t table(query varchar(2000),tables varchar(100))
Insert into @t
    select ’Truncate table ['+T.table_name+']‘, T.Table_Name from INFORMATION_SCHEMA.TABLES T
    left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
    on T.table_name=TC.table_name
    where (TC.constraint_Type =’Foreign Key’ or TC.constraint_Type is NULL) and
    T.table_name not in (‘dtproperties’,'sysconstraints’,'syssegments’) and
    Table_type=’BASE TABLE’

Insert into @t
    select ’delete from ['+T.table_name+']‘, T.Table_Name from INFORMATION_SCHEMA.TABLES T
        left outer join INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC
       on T.table_name=TC.table_name where TC.constraint_Type =’Primary Key’ and T.table_name <>’dtproperties’and Table_type=’BASE TABLE’

Declare @sql varchar(8000)
Select @sql=IsNull(@sql+’ ’,”)+ query from @t
print(@sql)
Exec(@sql)

第二種類型:表是空的,並且自增長列可以從1開始增長

使用 truncate table  語句

第三種類型:表是空的,並且自增長列可以從1開始增長,而且存在表間的約束。

如果執行方法一、二、三 語句時會提示:“無法截斷表 ‘***’,因爲該表正由 FOREIGN KEY 約束引用。”

方法四:

 1、先找出沒有外鍵約束的表,truncate

2、有外鍵的表,先delete,再復位identity列

 SET NoCount ON
   DECLARE @tableName varchar(512)
   Declare @SQL varchar(2048)
   SET @tableName=”
   WHILE NOT EXISTS
   (   
   –Find all child tables and those which have no relations
   SELECT T.table_name   FROM INFORMATION_SCHEMA.TABLES T
          LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC    ON T.table_name = TC.table_name
     WHERE ( TC.constraint_Type = ’Foreign Key’ OR TC.constraint_Type IS NULL )
         AND T.table_name NOT IN ( ’dtproperties’, ’sysconstraints’, ’syssegments’ )
         AND Table_type = ’BASE TABLE’
         AND T.table_name > @TableName
         )
    Begin
        SELECT @tableName = min(T.table_name)    FROM INFORMATION_SCHEMA.TABLES T
        LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC    ON T.table_name=TC.table_name
           WHERE ( TC.constraint_Type = ’Foreign Key’ OR TC.constraint_Type IS NULL )
         AND T.table_name NOT IN ( ’dtproperties’, ’sysconstraints’, ’syssegments’ )
         AND Table_type = ’BASE TABLE’
         AND T.table_name > @TableName
         –Truncate the table
         SET @SQL = ’Truncate table ’+ @TableName 
         print (@SQL)
         Exec(@SQL)
     End
  
   SET @TableName=”
   WHILE EXISTS
   ( 
   –Find all Parent tables
     SELECT T.table_name     FROM INFORMATION_SCHEMA.TABLES T
     LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC     ON T.table_name = TC.table_name
     WHERE TC.constraint_Type = ’Primary Key’
     AND T.table_name <> ’dtproperties’
     AND Table_type=’BASE TABLE’
     AND T.table_name > @TableName
     )
   Begin
     SELECT @tableName = min(T.table_name)   FROM INFORMATION_SCHEMA.TABLES T
          LEFT OUTER JOIN INFORMATION_SCHEMA.TABLE_CONSTRAINTS TC   ON T.table_name=TC.table_name
     WHERE TC.constraint_Type = ’Primary Key’
     AND T.table_name <> ’dtproperties’
     AND Table_type = ’BASE TABLE’
     AND T.table_name > @TableName
     –Delete the table
    
        SET @SQL = ’ delete from ’+ @TableName 
         print (@SQL)
         Exec(@SQL)
     –Reset identity column
         IF EXISTS ( SELECT *   FROM INFORMATION_SCHEMA.COLUMNS
             WHERE COLUMNPROPERTY(
             OBJECT_ID( QUOTENAME(table_schema)+ ’.' + QUOTENAME(@tableName) ),
             column_name,’IsIdentity’
             ) = 1
           )

     DBCC CHECKIDENT(@tableName,RESEED,0)
   End
   SET NoCount OFF

———————————————————————————–
另外還可以臨時禁用外鍵約束。語句爲:

– –禁用所有約束
–exec sp_msforeachtable ’alter table ? nocheck CONSTRAINT all’
– –再啓用所有外鍵約束
–exec sp_msforeachtable ’alter table ? check constraint all’

轉載請註明: 轉載自80eye

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章