sql-server - 获取 SQL Server 中所有系统数据库的列表
问题描述
我知道如何获取特定服务器上存在的所有数据库的列表。
SQL查询:
SELECT *
FROM master.sys.databases
EXEC sp_databases
但是,它给了我所有的数据库,比如系统以及用户定义的数据库。
我想知道如何获取仅存在于 SQL Server 中的用户定义/系统数据库列表,因为我看不到 中存在的任何列master.sys.databases
,我可以使用它来过滤它以满足我的要求。
解决方案
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)
推荐阅读
- apache-spark - 通过键 Spark Scala 加入 Dstream[Document] 和 Rdd
- ios - 材料设计的按钮表无法正确显示 - swift
- python - 根据一个对象是否不在另一个对象中组合和操作查询集
- jquery - jquery在div中包装子项目组
- ios - 区分活动呼叫是蜂窝呼叫还是 voip 呼叫
- android - 如果没有连接,如何从本地获取我的应用程序,如果有,如何从远程获取?
- python - MS SQL Python 日期时间晚于但不等于 '>' 返回结果为 '>='
- php - 将文件夹屏蔽/重定向到 wordpress 上的查询字符串
- c - 从像素缓冲区创建 HBITMAP 然后渲染
- c# - 更新用户名时验证用户名是否存在