我知道到目前为止(至少在MSSQL 2005之前),系统数据库是master,model,msdb和tempdb。
据我所知,未来不能保证这一点。 sys.databases视图和sys.sysdatabases视图都不会告诉我数据库是否被视为系统数据库。
是否可以获得此信息(数据库是否被视为系统数据库)的位置?
答案 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年就不用担心了:)