您的位置:首页 > 数据库

sql 删除数据库表内容

2013-10-17 13:29 274 查看
1、

若要删除表中的所有行,则 TRUNCATE TABLE 语句是一种快速、无日志记录的方法。TRUNCATE TABLE 与不含有 WHERE 子句的 DELETE 语句在功能上相同。但是,TRUNCATE TABLE 速度更快,并且使用更少的系统资源和事务日志资源。

与 DELETE 语句相比,TRUNCATE TABLE 具有以下优点:

所用的事务日志空间较少。

DELETE 语句每次删除一行,并在事务日志中为所删除的每行记录一项。TRUNCATE TABLE 通过释放用于存储表数据的数据页来删除数据,并且在事务日志中只记录页释放。

使用的锁通常较少。

当使用行锁执行 DELETE 语句时,将锁定表中各行以便删除。TRUNCATE TABLE 始终锁定表和页,而不是锁定各行。

如无例外,在表中不会留有任何页。

执行 DELETE 语句后,表仍会包含空页。例如,必须至少使用一个排他 (LCK_M_X) 表锁,才能释放堆中的空表。如果执行删除操作时没有使用表锁,表(堆)中将包含许多空页。对于索引,删除操作会留下一些空页,尽管这些页会通过后台清除进程迅速释放。

与 DELETE 语句相同,使用 TRUNCATE TABLE 清空的表的定义与其索引和其他关联对象一起保留在数据库中。

1、直接删除数据表:delete from tablename 不可复位id

2、truncate table tablename //可复位id

3、在2中,如果table中有外键,那么提示错误“无法截断表 'area',因为该表正由 FOREIGN KEY 约束引用。” 那么需要删除约束

delete from dbo.Region

dbcc checkident('Region',reseed,0)

//将数据库中所有表的内容都删除

use WaterMeterReadingDB

select 'alter table '+name+' nocheck constraint all' from sysobjects where type='U'

DECLARE tables_cursor CURSOR

FOR

SELECT name FROM sysobjects WHERE type = 'U'

OPEN tables_cursor

DECLARE @tablename sysname

FETCH NEXT FROM tables_cursor INTO @tablename

WHILE (@@FETCH_STATUS <> -1)

BEGIN

--Exec ('alter table ' +@tablename +' nocheck constraint all')

EXEC ('delete from ' + @tablename)

EXEC ('DBCC CHECKIDENT('+ @tablename +',reseed,0)')

--Exec ('alter table ' + @tablename +' check constraint all')

FETCH NEXT FROM tables_cursor INTO @tablename

END

4、关于第三种方法,也可以先关掉数据库中的相关约束,然后truncate 表中的数据

1)禁止所有表约束的SQL

select 'alter table '+name+' nocheck constraint all' from sysobjects where type='U'

2)删除所有表数据的SQL

select 'TRUNCATE TABLE '+name from sysobjects where type='U'

3)恢复所有表约束的SQL

select 'alter table '+name+' check constraint all' from sysobjects where type='U'

4)删除某字段的约束

declare @name varchar(100)

--DF为约束名称前缀

select @name=b.name from syscolumns a,sysobjects b where a.id=object_id('表名') and b.id=a.cdefault and a.name='字段名' and b.name like 'DF%'

--删除约束

alter table 表名 drop constraint @name

--为字段添加新默认值和约束

ALTER TABLE 表名 ADD CONSTRAINT @name DEFAULT (0) FOR [字段名]对字段约束进行更改

--删除约束

ALTER TABLE tablename

Drop CONSTRAINT 约束名

--修改表中已经存在的列的属性(不包括约束,但可以为主键或递增或唯一)

ALTER TABLE tablename

alter column 列名 int not null

--添加列的约束

ALTER TABLE tablename

ADD CONSTRAINT DF_tablename_列名 DEFAULT(0) FOR 列名

--添加范围约束

alter table tablename add check(性别 in ('M','F'))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐