首页 > 解决方案 > 获取 SQL Server 中所有系统数据库的列表

问题描述

我知道如何获取特定服务器上存在的所有数据库的列表。

SQL查询:

SELECT *
FROM master.sys.databases
EXEC sp_databases

但是,它给了我所有的数据库,比如系统以及用户定义的数据库。

我想知道如何获取仅存在于 SQL Server 中的用户定义/系统数据库列表,因为我看不到 中存在的任何列master.sys.databases,我可以使用它来过滤它以满足我的要求。

标签: sql-server

解决方案


sys.databases目录视图不提供区分用户数据库和系统数据库的列。但是,这些名称是众所周知的,如文档中所列,可用于根据需要排除它们。此外,您可能希望排除 SSISDB 目录和分发服务器数据库(如果存在)。下面是一个示例查询。

SELECT name
FROM sys.databases
WHERE
    name NOT IN(N'master',N'model',N'tempdb',N'msdb',N'SSISDB')
    AND is_distributor = 0;

顺便说一句,这是 SSMS 用于枚举从跟踪中收集的系统数据库的查询片段:

WHERE
(CAST(case when dtb.name in (''master'',''model'',''msdb'',''tempdb'') then 1 else dtb.is_distributor end AS bit)=@_msparam_0)

推荐阅读