SQL Server:如何判断数据库是否是系统数据库?
-
10-07-2019 - |
题
我知道到目前为止(至少在MSSQL 2005之前),系统数据库是master,model,msdb和tempdb。
据我所知,未来不能保证这一点。 sys.databases视图和sys.sysdatabases视图都不会告诉我数据库是否被视为系统数据库。
是否可以获得此信息(数据库是否被视为系统数据库)的位置?
解决方案
刚潜入Microsoft.SqlServer.Management.Smo.Database
对象(由Microsoft本身提供!)
他们只是使用以下声明来做到这一点:
CAST(case when dtb.name in ('master','model','msdb','tempdb')
then 1
else dtb.is_distributor end AS bit) AS [IsSystemObject]
简而言之:如果数据库名为master
,model
,msdb
或tempdb
,则它是一个系统数据库;
如果视图is_distributor = 1
中的字段sys.databases
,它也是一个系统数据库。
希望这有帮助
麦
其他提示
您可以依赖DB_ID()函数<!> lt; = 4
你必须非常努力地改变这个......
SQL Server Management Studio使用此
如果展开<!>“系统数据库<!>”;在<!> quot;对象资源管理器<!>中; (从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
对于系统数据库,
owner_sid等于0x01。 因此,您可以使用它来识别数据库是否是系统数据库。
select * from sys.databases
where owner_sid != 0x01
没有没有这样的选择AFAIK。我猜你可以检查id.dys.databases.owner_sid = 0x01。
我认为您不必担心MS更改系统数据库名称。如果他们这样做了你至少20年就不用担心了:)
不隶属于 StackOverflow