清空数据库的内容

时间:2011-04-24 08:24:04

标签: sql-server database

我有一个关系复杂的庞大数据库,如何在不违反外键约束的情况下删除所有表内容,是否有这样的方法呢?

请注意,我正在编写一个SQL脚本文件来删除表,例如以下示例:

delete from A
delete from B
delete from C
delete from D
delete from E

但我不知道我应该从哪个表开始。

4 个答案:

答案 0 :(得分:2)

步骤可以是:

  1. 禁用所有表中的所有约束
  2. 删除所有表格中的所有记录
  3. 再次启用约束。
  4. 另见本讨论:SQL: delete all the data from all available tables

答案 1 :(得分:2)

在SQL Server中,没有本地方法可以执行您所要求的操作。根据您的特定环境限制,您可以选择一些选项:

  1. 找出表之间的关系,并从foreigns到parent以适当的顺序开始删除行。这对于大量物体来说可能是耗时的,但就最小的破坏来说是“最安全的”。
  2. 禁用外键约束和TRUNCATE TABLE。如果您处理大量数据,这会更快一些,但您仍然需要知道所有关系的位置。如果您使用较少的表,虽然选项1变得可行
  3. ,但并不太可怕
  4. 编写数据库对象和DROP DATABASE / CREATE DATABASE。如果您不关心数据库的原始拆卸,这是另一种选择,但是,您仍然需要了解创建的对象优先级。 SQL Server以及第三方工具提供了脚本对象DROP / CREATE的方法。如果您决定采用这条路线,那么好处是您拥有所有对象的脚本备份(我希望保留“以防万一”),并且只要您保持脚本与之同步,将来的拆卸几乎是即时的。任何改变。
  5. 正如您所看到的,这不是一个非常简单的过程,因为您试图颠覆存在约束的原因。

答案 2 :(得分:0)

TRUNCATE TABLE tableName
  

删除表中的所有行   记录单个行删除。   TRUNCATE TABLE类似于   没有WHERE子句的DELETE语句;   但是,TRUNCATE TABLE更快   使用较少的系统和事务日志   资源。

TRUNCATE TABLE (Transact-SQL)

答案 3 :(得分:0)

Dude,从表面上看你的问题......你想完全重新创建没有数据的模式......忘记单个查询(太慢)......只是destroydb,然后创建b(或者你的RDBM的任何东西)相当于......)你可能想聘请一位称职的DBA。