关闭

MSSQL中如何用SQL清除所有表的数据?

发表于:2012-4-23 10:33

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:邀月周记    来源:51Testing软件测试网采编

  有朋友问起:MSSQL中如何用SQL清除所有表的数据?这个需求分三种类型:

  第一:只要数据库中表是空的;

  第二:表是空的,并且自增长列可以从1开始增长。

  第三:表是空的,并且自增长列可以从1开始增长,而且存在表间的约束。

  邀月稍微整理了下,放在这里,便于有需要的朋友参阅。

  其实,这不算什么需求。只要用数据库的生成脚本,几分钟即可生成一个干净的表结构及存储过程、视图、约束等。这里提供了另一种用SQL解决问题的方案。权当是无聊的学习,加深点印象吧。呵呵。

  首先,作一些假设:假设database名为TestDB_2000_2005_2008

  预先准备一些脚本

use master
go
IF OBJECT_ID('TestDB_2000_2005_2008') IS NOT NULL
-- print 'Exist databse!'
-- else print 'OK!'
DROP Database TestDB_2000_2005_2008
GO
Create database TestDB_2000_2005_2008
go
use TestDB_2000_2005_2008
go
IF OBJECT_ID('b') IS NOT NULL
drop table b
go
create table b(id int identity(1,1),ba int,bb int)
--truncate table b
insert into b
select  1,1 union all
select 2,2 union all
select 1,1
IF OBJECT_ID('c') IS NOT NULL
drop table c
go
create table c(id int identity(1,1),ca int,cb int)
insert into c
select  1,2 union all
select 1,3

  先来看看第一种需求: 只要数据库中表是空的。

  这个其实并不难,用一个游标循环得出所有表名,再清除所有表,delete或truncate table

  提供几个语句:以下语句均在SQL2000/SQL2005/SQL2008下使用通过。

  方法甲:

/********************MSSQL 2000/2005/2008***********************/
use TestDB_2000_2005_2008
go
select * from b
select * from c
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
select * from b
select * from c

31/3123>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号