我不想输入所有表的名称来删除所有表。一个查询可以吗?
使用 INFORMATION_SCHEMA.TABLES 视图获取表列表。在 select 语句中生成 Drop 脚本并使用动态 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。
foreign Keys
foreign keys
EXEC sp_msforeachtable "ALTER TABLE ? NOCHECK CONSTRAINT all"