我试图写一个脚本,将完全清空SQL Server数据库。这是我目前所拥有的:
USE [dbname]
GO
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
EXEC sp_msforeachtable 'DELETE ?'
当我在管理工作室运行它时,我得到:
命令执行成功。
但当我刷新表列表时,它们都还在那里。我做错了什么?
我试图写一个脚本,将完全清空SQL Server数据库。这是我目前所拥有的:
USE [dbname]
GO
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
EXEC sp_msforeachtable 'DELETE ?'
当我在管理工作室运行它时,我得到:
命令执行成功。
但当我刷新表列表时,它们都还在那里。我做错了什么?
当前回答
你差不多说对了,可以用:
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
EXEC sp_msforeachtable 'DROP TABLE ?'
但是第二行你可能需要执行不止一次,直到你停止得到错误:
Could not drop object 'dbo.table' because it is referenced by a FOREIGN KEY constraint.
信息:
Command(s) completed successfully.
表示已成功删除所有表。
其他回答
你差不多说对了,可以用:
EXEC sp_msforeachtable 'ALTER TABLE ? NOCHECK CONSTRAINT all'
EXEC sp_msforeachtable 'DROP TABLE ?'
但是第二行你可能需要执行不止一次,直到你停止得到错误:
Could not drop object 'dbo.table' because it is referenced by a FOREIGN KEY constraint.
信息:
Command(s) completed successfully.
表示已成功删除所有表。
Delete用于从表中删除行。你应该用drop table代替。
EXEC sp_msforeachtable 'drop table [?]'
Azure SQL +表(带约束)的模式与dbo + ipv6_database_firewall_rules条件不同。
这是一个小扩展https://stackoverflow.com/a/43128914/4510954的答案。
DECLARE @sql NVARCHAR(2000)
WHILE(EXISTS(SELECT 1 from INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE CONSTRAINT_TYPE='FOREIGN KEY'))
BEGIN
SELECT TOP 1 @sql=('ALTER TABLE ' + CONSTRAINT_SCHEMA + '.[' + TABLE_NAME + '] DROP CONSTRAINT [' + CONSTRAINT_NAME + ']')
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'FOREIGN KEY'
EXEC(@sql)
PRINT @sql
END
WHILE(EXISTS(SELECT * from INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME != '__MigrationHistory' AND TABLE_NAME != 'database_firewall_rules' AND TABLE_NAME != 'ipv6_database_firewall_rules'))
BEGIN
SELECT TOP 1 @sql=('DROP TABLE ' + CONSTRAINT_SCHEMA + '.[' + TABLE_NAME + ']')
FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE TABLE_NAME != '__MigrationHistory' AND TABLE_NAME != 'database_firewall_rules'
EXEC(@sql)
PRINT @sql
END
如果删除整个数据库,然后重新创建它呢?这对我很有用。
DROP DATABASE mydb;
CREATE DATABASE mydb;
在地对地导弹:
右键单击数据库 转到“任务” 点击“生成脚本” 在“选择对象”部分,选择“脚本整个数据库和所有数据库对象” 在“设置脚本选项”部分,单击“高级”按钮 在“脚本删除和创建”上切换“脚本创建”到“脚本删除”并按“确定” 然后,保存到文件,剪贴板,或新的查询窗口。 运行脚本。
现在,这将删除所有内容,包括数据库。确保删除您不希望删除的项目的代码。或者,在“选择对象”部分,而不是选择脚本整个数据库,只是选择你想要删除的项目。