是否可以在T-SQL中执行系统查询,列出服务器上没有任何表的所有数据库?此外,可以使用没有表,视图和存储过程的列表数据库之类的常见对象(一次性,在数据库中表示0个表,0个视图和0个存储过程,然后列出) )
TIA!
答案 0 :(得分:1)
您可以使用未记录的过程sp_MSforeachdb
以及INFORMATION_SCHEMA
中的视图。请注意,为每个数据库返回一个结果集。
--List of db's with no user tables.
EXECUTE master.sys.sp_MSforeachdb 'USE [?]; SELECT DB_NAME()
WHERE NOT EXISTS
(
SELECT 1
FROM INFORMATION_SCHEMA.TABLES t
WHERE t.TABLE_TYPE = ''BASE TABLE''
)'
--List of db's with no stored procedures.
EXECUTE master.sys.sp_MSforeachdb 'USE [?]; SELECT DB_NAME()
WHERE NOT EXISTS
(
SELECT *
FROM INFORMATION_SCHEMA.ROUTINES r
WHERE r.ROUTINE_TYPE = ''PROCEDURE''
)'
答案 1 :(得分:0)
我喜欢PowerShell这种事情
import-module sqlps;
$server = new-object microsoft.sqlserver.management.smo.server '.';
foreach ($db in $server.Databases) {
if ($db.Tables.Count -eq 0) {
$db.Name
}
}
我将它作为练习留给读者将其扩展到其他对象类型(即存储过程,视图等)。