SQL Server:如何判断数据库是否是系统数据库?

时间:2009-11-30 10:51:00

标签: sql-server-2005 information-schema

我知道到目前为止(至少在MSSQL 2005之前),系统数据库是master,model,msdb和tempdb。

据我所知,未来不能保证这一点。 sys.databases视图和sys.sysdatabases视图都不会告诉我数据库是否被视为系统数据库。

是否可以获得此信息(数据库是否被视为系统数据库)的位置?

4 个答案:

答案 0 :(得分:0)

您可以依赖DB_ID()函数< = 4

你必须非常努力地改变这个......

答案 1 :(得分:0)

SQL Server Management Studio使用此

如果在“对象资源管理器”中扩展“系统数据库”(从Wireshark中看到):

SELECT dtb.name AS [Database_Name]
FROM master.sys.databases AS dtb
WHERE (CAST(case when dtb.name in ('master','model','msdb','tempdb') then 1 else dtb.is_distributor end AS bit)=1)

为简单起见,我删除了不相关的列,删除了orderby,并将@ _msparam_0变量替换为其值1

答案 2 :(得分:-4)

对于系统数据库,

owner_sid等于0x01。 因此,您可以使用它来识别数据库是否是系统数据库。

select * from sys.databases
where owner_sid != 0x01

答案 3 :(得分:-6)

没有没有这样的选择AFAIK。我猜你可以检查id.dys.databases.owner_sid = 0x01。

我认为您不必担心MS更改系统数据库名称。如果他们这样做了你至少20年就不用担心了:)