列出所有没有表的数据库(在其他数据库对象中)?

时间:2014-08-20 15:56:21

标签: sql sql-server sql-server-2005

是否可以在T-SQL中执行系统查询,列出服务器上没有任何表的所有数据库?此外,可以使用没有表,视图和存储过程的列表数据库之类的常见对象(一次性,在数据库中表示0个表,0个视图和0个存储过程,然后列出) )

TIA!

2 个答案:

答案 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
   }
}

我将它作为练习留给读者将其扩展到其他对象类型(即存储过程,视图等)。