1
A
回答
1
这应该做到这一点。 在实验室机器上进行测试,并使用0个用户表删除所有数据库。 但是请注意,表格不一定是数据库中唯一的东西。可能存在有人可能仍然需要的存储过程,函数等。
注意这是一个非常危险的操作,因为它丢弃数据库。自担风险使用。我对您造成的损害不承担任何责任。
USE [master];
DECLARE @name varchar(50);
DECLARE @innerQuery varchar(max);
DECLARE tableCursor CURSOR FOR SELECT name FROM sys.databases where owner_sid != 0x01;
OPEN tableCursor;
FETCH NEXT FROM tableCursor
INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @innerQuery = 'USE [' + @name + ']; IF (SELECT COUNT(*) FROM sys.objects WHERE type = ''U'') = 0
BEGIN
USE [master];
DROP DATABASE [' + @name + ']
END'
EXEC(@innerQuery)
FETCH NEXT FROM tableCursor INTO @name
END
CLOSE tableCursor;
DEALLOCATE tableCursor;
另请注意,如果正在使用数据库,SQL Server将拒绝将其删除。所以,如果有其他连接到特定的数据库,它试图放弃,该命令将中止。
为了避免这个问题,您可以将有问题的数据库设置为单用户模式。
以下脚本与上述相同,但它也将目标数据库设置为单用户模式以终止活动连接。 更加小心,因为它本质上'S核选择:
use [master];
DECLARE @name varchar(50);
DECLARE @innerQuery varchar(max);
DECLARE tableCursor CURSOR FOR SELECT name FROM sys.databases where owner_sid != 0x01;
OPEN tableCursor;
FETCH NEXT FROM tableCursor
INTO @name
WHILE @@FETCH_STATUS = 0
BEGIN
SET @innerQuery =
'USE [' + @name + '];
IF (SELECT COUNT(*) FROM sys.objects WHERE type = ''U'') = 0
BEGIN
USE [master];
ALTER DATABASE [' + @name + '] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
DROP DATABASE [' + @name + '];
END'
EXEC(@innerQuery)
FETCH NEXT FROM tableCursor INTO @name
END
CLOSE tableCursor;
DEALLOCATE tableCursor;
0
我认为这是不可能的(至少不是一个TSQL的命令,可能是一个存储过程的地方)。您必须查询sysobjects
并在发现任何情况下中止。 (并且您必须决定是否要忽略某些系统对象,如设计表)。
0
下面的脚本将生成所需的DROP DATABASE脚本。你可以调整它来执行语句(在主数据库上下文中),但我建议你先检查它以防万一。
EXEC sp_MSforeachdb N'
USE [?];
IF N''?'' NOT IN(N''master'', N''model'', N''msdb'', N''tempdb'')
BEGIN
IF NOT EXISTS(
SELECT *
FROM sys.tables
WHERE
OBJECTPROPERTYEX(object_id, ''IsMSShipped'') = 0
)
BEGIN
PRINT ''DROP DATABASE [?];'';
END;
END;';
相关问题
- 1. 没有删除数据库表
- 2. 没有错误,但没有从Sqlite数据库删除数据使用删除
- 3. ContentProvider数据库没有被删除
- 4. 有没有办法从一个数据库中删除'sysmessages'表?
- 5. 数据没有从sqlite3表中删除
- 6. PhpMyAdmin没有删除数据库选项+删除SQL命令
- 7. 删除数据库表
- 8. 提交表单后记录没有从数据库中删除
- 9. rake db:reset删除所有表,但不删除数据库
- 10. 删除数据表格数据库?
- 11. 首先使用EF数据库删除表中没有主键的数据
- 12. 删除所有数据库下有一定数量的表
- 13. 从SQL Server数据库中的所有表数据删除,除了一些表
- 14. 删除/删除Teradata中的数据库
- 15. 删除数据库中的__MigrationHistory表
- 16. Django的数据库表中删除
- 17. MySQL数据库神秘的表删除
- 18. 删除的SQLite数据库表
- 19. 删除跨多个数据库的表
- 20. 从包含表的所有数据库中的表中删除
- 21. 删除数据库
- 22. 删除数据库
- 23. 删除库中的所有数据集
- 24. 在数据库中删除没有ID的选择框的行
- 25. 没有删除数据的MySQL复制
- 26. 删除没有全年数据的行
- 27. MySQL删除没有查询的数据?
- 28. 如何从数据库表中删除所有数据?
- 29. 删除所有访问数据库表数据
- 30. WordPress的插件删除,并删除它的数据库表
Sql Shell将是我的选择。 – stckl0ve
请参阅http://dba.stackexchange.com/questions/47726/how-to-query-a-database-for-empty-tables。然后删除名称返回的表。 – scrayne
@DanRitchie那真的不是OP要找的东西....我们正在谈论数据库,而不是表格。 –