您现在的位置:龙卷风首页 ›› 网络编程 ›› 阅读文章

Sql Server 2000 清空所有数据表

Sql Server 2000 清空记录 TRUNCATE TABLE

本站注:次存储过程在有众多数据表的时候可能有用,一般情况下不会“如此绝情”。慎用。TRUNCATE TABLE 命令,会重置表示列计数器。

       很多时候,你想将数据库恢复到最初的“纯净”状态,用数据库DDL脚本当然是最好的选择,但是,如果你没有这个脚本呢?本存储过程就是提供这样一个方法……

/**
* 关于: MS SQL Server 2000 存储过程 - 2
* 作者:彭建军
* 存储过程名称:  TruncateAllTables
* 存储过程功能: 清空数据库中除 ESCAPE 表中的记录除外的所有表中的数据!
* 测试环境:SQL Server 2000 SP4 + Windows XP Sp2
* 更新时间:2006-7-8 16:36
**/

USE Pjj
GO

IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'P' AND NAME = 'TruncateAllTables')
 DROP PROCEDURE TruncateAllTables
GO

--该存储过程功能:
CREATE PROCEDURE TruncateAllTables
WITH ENCRYPTION
AS
BEGIN TRANSACTION

 IF EXISTS (SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'U' AND NAME = 'EscapeTable')
  DROP TABLE EscapeTable

 CREATE TABLE EscapeTable
 (
  Name VARCHAR(100)
 )

 --这里非常重要,请将不想被清空数据的表名插入 EscapeTable 表中
 INSERT INTO EscapeTable
  SELECT '不想被清空数据的表名'UNION ALL
  SELECT 'T2'

 DECLARE @SQLString NVARCHAR(500)
 DECLARE @TableName VARCHAR(100)

 DECLARE MyCursor CURSOR
  FOR SELECT NAME FROM SYSOBJECTS WHERE XTYPE = 'U' AND NAME NOT IN(SELECT NAME FROM EscapeTable)
  ORDER BY ID

 OPEN MyCurSor
  FETCH NEXT FROM MyCurSor INTO @TableName
 WHILE (@@FETCH_STATUS = 0)
 BEGIN
  SET @SQLString = 'TRUNCATE TABLE ' + @TableName
  EXECUTE sp_executesql @SQLString
  
  FETCH NEXT FROM MyCurSor INTO @TableName
 END
CLOSE MyCursor
DEALLOCATE MyCursor

DROP TABLE EscapeTable

PRINT 'Procedure is successful done.'

SELECT 1

COMMIT TRANSACTION
GO

--重要!执行该存储过程将清空不包含在 ESCAPE 表中的记录内的所有表中的数据!执行前请确认!
INSERT INTO T1
 SELECT 'abc' UNION ALL
 SELECT 'opq'

INSERT INTO T2
 SELECT 'abc' UNION ALL
 SELECT 'opq'

EXECUTE TruncateAllTables
GO

SELECT * FROM T1
SELECT * FROM T2
GO 

来源:http://blog.csdn.net/pengjj/archive/2006/07/08/893680.aspx

作者 不见不散 本文仅代表作者观点,与龙卷风资讯网立场无关。

我来说两句

内容/Content