一尘不染

如何使用一个SQL查询从数据库中删除所有表?

sql

我不想键入所有表的名称以删除所有表。一个查询有可能吗?


阅读 224

收藏
2021-05-05

共1个答案

一尘不染

使用 INFORMATION_SCHEMA.TABLES 视图获取表列表。在select语句中生成Drop脚本,并使用Dynamic SQL将其删除:

DECLARE @sql NVARCHAR(max)=''

SELECT @sql += ' Drop table ' + QUOTENAME(TABLE_SCHEMA) + '.'+ QUOTENAME(TABLE_NAME) + '; '
FROM   INFORMATION_SCHEMA.TABLES
WHERE  TABLE_TYPE = 'BASE TABLE'

Exec Sp_executesql @sql

系统表 版本

DECLARE @sql NVARCHAR(max)=''

SELECT @sql += ' Drop table ' + QUOTENAME(s.NAME) + '.' + QUOTENAME(t.NAME) + '; '
FROM   sys.tables t
       JOIN sys.schemas s
         ON t.[schema_id] = s.[schema_id]
WHERE  t.type = 'U'

Exec sp_executesql @sql

注意: 如果foreign Keys在表之间定义了任何定义,则首先运行以下查询以 禁用foreign keys数据库中所有存在的内容。

EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"

有关更多信息, 请在此处检查

2021-05-05