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要找的東西....我們正在談論數據庫,而不是表格。 –