清空数据库中表记录

/*--------------------------------------------
--清空数据库中表记录,允许排除某些表
--yangys  2006/03/29
*/

--首先独立删除外健约束
declare @strsql varchar(8000)
declare curTemp cursor local for
select s='alter table ['+object_name(parent_obj)+'] drop constraint ['+name+']'
from sysobjects where xtype ='F'

open curTemp
fetch next from curTemp into @strsql
while @@fetch_status=0
begin
 exec(@strsql)
 fetch next from curTemp into @strsql
end
close curTemp
deallocate curTemp
go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tmpSource]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tmpSource]
GO
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[tmpSpec]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[tmpSpec]
GO

--创建临时表
--所有表名称信息
create table tmpSource
(
 tableName varchar(100)
)

--要删除表信息
create table tmpSpec
(
 tableName varchar(100)
)
go

--插入要删除表信息
insert tmpSpec
select 'InfoFormType'
union all
select 'FormTypeID'
union all
select 'InfoSettingModule'
union all
select 'InfoSettingModule'
union all
select 'permit_info'
union all
select 'ManufacturePlanType'
union all
select 'PrintLableName'
union all
select 'ManufacturePlanGrade'
union all
select 'QualityMethodType'
union all
select 'StkInType'
union all
select 'StkOutType'
union all
select 'Stk'
union all
select 'InfoOperator'
union all
select 'InfoCurrency'


go

--插入表名信息
insert tmpSource
select [name] from dbo.sysobjects where xtype='U' and [name]<>'dtproperties' And [Name] <>'MSreplication_options'

--删除不需要清空的表
delete from tmpSource
where exists(select 1 from tmpSpec where tableName=tmpSource.tableName)

go

--执行删除
declare @str varchar(8000)
set @str=''

select @str=@str+[tableName] +'   , ' from tmpSource

declare @strCommand varchar(2000)
set @strCommand='delete  '
set @str=left(@str,len(@str)-1)
set @str= replace(@str,',',@strCommand)

set @str=@strCommand+' '+@str

exec(@str)

go

<think> 我们被要求回答用户的问题:查找使用SQL语句清空数据库记录的代码 根据引用内容,用户提供了三种清空数据库所有表数据的方法(针对MS SQL Server),并提到了三种不同的清空方式:delete, truncate, drop 但是用户明确表示想要的是清空记录(即数据)的代码,而不是删除表结构。 注意:用户引用的内容主要针对MS SQL Server,所以我们的回答也以SQL Server为例,但会提及其他数据库的差异。 回答要点: 1. 清空记录的两种主要方式:DELETE 和 TRUNCATE TABLE,以及它们的区别。 2. 针对单个表的清空操作。 3. 针对整个数据库所有表的清空操作(如用户引用中提到的三种方法)。 另外,用户引用[3]中明确提到: 1. delete: 逐行删除,速度极慢,不适合大量数据删除。 2. truncate: 删除所有数据,保留表结构,不能撤消还原,快速。 3. drop: 删除表(包括结构和数据)。 因此,清空记录通常指的是使用DELETE(不加条件)或TRUNCATE TABLE。 我们按照以下结构回答: 一、清空单个表 二、清空数据库中所有表(多个表) 三、不同数据库的注意事项 注意:根据引用[2],用户特别提到了MS SQL Server,所以我们将以SQL Server为主,同时提及其他数据库(如MySQL, PostgreSQL)的差异。 生成相关问题: 1. DELETE和TRUNCATE TABLE有什么区别? 2. 如何安全地清空数据库中的所有表(考虑外键约束)? 3. 在哪些情况下不能使用TRUNCATE TABLE? </think> ### 使用SQL语句清空数据库记录的代码 清空数据库记录(保留表结构)主要有两种方法:`TRUNCATE TABLE` 和 `DELETE`。以下是详细说明和代码示例: #### 一、清空单个表记录 1. **高效清空(推荐)** 使用 `TRUNCATE TABLE`,适用于需要快速清空大量数据的场景: ```sql TRUNCATE TABLE 表名; ``` *示例:清空 `employees` 表:* ```sql TRUNCATE TABLE employees; -- 立即释放空间,重置自增ID[^3] ``` 2. **条件清空** 使用 `DELETE`,适用于需要过滤数据或事务控制的场景: ```sql DELETE FROM 表名; -- 清空所有记录 -- 或带条件删除 DELETE FROM 表名 WHERE 条件; ``` *示例:清空2020年前的订单记录:* ```sql DELETE FROM orders WHERE order_date < '2020-01-01'; ``` #### 二、清空数据库中所有表记录(SQL Server) 引用[2]提供了三种批处理方法: 1. **动态SQL拼接** ```sql DECLARE @sql NVARCHAR(MAX) = ''; SELECT @sql += 'TRUNCATE TABLE ' + name + '; ' FROM sys.tables WHERE type = 'U'; EXEC sp_executesql @sql; -- 执行生成的SQL语句[^2] ``` 2. **游标遍历** ```sql DECLARE @tableName NVARCHAR(255); DECLARE tableCursor CURSOR FOR SELECT name FROM sys.tables WHERE type = 'U'; OPEN tableCursor; FETCH NEXT FROM tableCursor INTO @tableName; WHILE @@FETCH_STATUS = 0 BEGIN EXEC('TRUNCATE TABLE ' + @tableName); FETCH NEXT FROM tableCursor INTO @tableName; END CLOSE tableCursor; DEALLOCATE tableCursor; -- 需手动释放资源[^2] ``` 3. **系统存储过程** ```sql EXEC sp_MSforeachtable 'TRUNCATE TABLE ?'; -- "?"代表当前表名[^2] ``` #### 三、关键区别 | 方法 | 速度 | 事务日志 | 自增ID重置 | 可回滚 | 激活触发器 | |---------------|--------|----------|------------|--------|------------| | **`TRUNCATE`** | 极快 | 最小 | 是 | 否 | 否 | | **`DELETE`** | 慢 | 完整记录 | 否 | 是 | 是 | > ⚠️ **注意事项** > - `TRUNCATE` 需要 `ALTER TABLE` 权限 > - 存在外键约束时需先处理依赖(如禁用约束) > - 操作前务必**备份数据** #### 四、其他数据库语法 - **MySQL**: ```sql TRUNCATE TABLE 表名; -- 语法与SQL Server相同 ``` - **PostgreSQL**: ```sql TRUNCATE TABLE 表名 CASCADE; -- CASCADE级联清空依赖表 ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值