【问题标题】:How to TRUNCATE 100 TABLES At a time in SQL如何在 SQL 中一次截断 100 个表
【发布时间】:2015-11-22 17:27:00
【问题描述】:

我只想删除数据而不是结构。

【问题讨论】:

  • 您想用一条语句从 100 个不同的表中删除所有数据吗? (或者你想从一个表中删除 100 行...?)
  • 我想从所有 100 个不同的表中删除数据,只需 1 条语句
  • 您使用的是哪个 dbms? (其中一些有 TRUNCATE 语句,另一些则没有......)

标签: sql database truncate


【解决方案1】:

生成一个脚本。

Oracle 示例:

set head off
set pagesize 0
spool t.sql

select 'truncate table '||table_name||';' from all_tables
order by table_name
where rownum < 100

或者,如果需要 SQL Server 或 ANSI 方法,请使用 sys.tables 或 INFORMATION_SCHEMA.tables

select top 100 
'truncate table ' + table_name + ';' 
from INFORMATION_SCHEMA.tables;

MySQL

select CONCAT("truncate table ", table_name, ";")
from INFORMATION_SCHEMA.tables 
limit 100;

【讨论】:

  • ANSI SQL 具有 FETCH FIRST,而不是 TOP。 (较新的 Oracle 版本也有 FETCH FIRST。)
  • @jarlh - 谢谢,但我只是给出了特定于平台的示例,并且刚刚提到了关于可以使用哪个字典表的 ANSI。如果您想改进,欢迎您进行编辑。
【解决方案2】:

为每个表生成TRUNCATE TABLE语句并执行

您可以通过多种方式做到这一点,其中一些是

  • 使用循环和动态 SQL
  • 将表名复制到excel中生成语句

【讨论】:

  • 这意味着我使用了 100 次 TRUNCATE 表查询
  • @jiten 是的,为什么这是个问题?
  • 问题是如何一次获取或复制100个表名
  • @jiten 你知道要删除哪些表吗?它们被写在某个地方对吗?将它们复制到excel中,您可以在excel中轻松生成TRUNCATE TABLE语句,然后粘贴到SQL中执行
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多