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'