SQL Server: Wie kann man sagen, ob eine Datenbank eine Systemdatenbank ist?
-
10-07-2019 - |
Frage
Ich weiß, dass bisher (bis MSSQL 2005 zumindest), Systemdatenbanken sind Master, Modell, msdb und tempdb.
Das Ding ist, soweit ich das beurteilen kann, ist dies nicht gewährleistet auch in Zukunft erhalten bleiben. Und weder die sys.databases Ansicht noch die sys.sysdatabases sieht mir sagen, ob eine Datenbank als Systemdatenbank betrachtet wird.
Gibt es irgendwo, wo diese Informationen (ob eine Datenbank eine Systemdatenbank oder nicht berücksichtigt wird) erhalten werden?
Lösung
tauchte einfach in Microsoft.SqlServer.Management.Smo.Database
Objekt (das von Microsoft selbst zur Verfügung gestellt!)
Sie sind einfach tun dies mit folgenden Aussage:
CAST(case when dtb.name in ('master','model','msdb','tempdb')
then 1
else dtb.is_distributor end AS bit) AS [IsSystemObject]
Kurz gesagt: Wenn eine Datenbank master
, model
, msdb
oder tempdb
benannt ist, es ist ein System db;
es ist auch ein System db, wenn Feld is_distributor = 1
in der Ansicht sys.databases
.
Hope, das hilft
Jimmy
Andere Tipps
Sie können auf der DB_ID () Funktion verlassen <= 4
Sie müßten sehr hart arbeiten, um dies zu ändern ...
SQL Server Management Studio verwendet diese
Wenn Sie erweitern "Systemdatenbanken" in "Objekt-Explorer" (gesehen von 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)
Aus Gründen der Einfachheit I entfernt irrelevante Spalten, entfernt orderby und ersetzt @ _msparam_0 Variable durch ihren Wert 1
owner_sid gleich 0x01 nur für Systemdatenbanken. So können Sie es verwenden, um zu erkennen, ob die Datenbank ein System DB ist oder nicht.
select * from sys.databases
where owner_sid != 0x01
no gibt es keine solche Option AFAIK. Ich denke, man könnte die ID der sys.databases.owner_sid prüfen = 0x01.
Ich glaube nicht, Sie MS Ändern der System db Namen kümmern. wenn sie sich theat würden Sie nicht für mindestens 20 Jahre zu kümmern haben:)