Question

Je sais que jusqu’à présent (jusqu’à au moins MSSQL 2005), les bases de données système sont master, model, msdb et tempdb.

Pour autant que je sache, rien ne garantit que cela sera préservé à l'avenir. Et ni la vue sys.databases ni la vue sys.sysdatabases ne me disent pas si une base de données est considérée comme une base de données système.

Existe-t-il un endroit où ces informations (qu'une base de données soit considérée ou non comme une base de données système) peuvent être obtenues?

Était-ce utile?

La solution

Vient de plonger dans Microsoft.SqlServer.Management.Smo.Database objet (fourni par Microsoft lui-même!) Ils le font simplement en utilisant la déclaration suivante:

CAST(case when dtb.name in ('master','model','msdb','tempdb') 
   then 1 
   else dtb.is_distributor end AS bit) AS [IsSystemObject]

En bref: si une base de données est nommée master, model, msdb ou tempdb, il s’agit d’une base de données système; c'est aussi une base de données système, si le champ is_distributor = 1 dans la vue sys.databases.

J'espère que cela vous aidera

Jimmy

Autres conseils

Vous pouvez compter sur la fonction DB_ID () < = 4

Vous devrez travailler très fort pour changer cela ...

SQL Server Management Studio utilise cette

si vous développez " bases de données système " dans " Explorateur d'objets " (vu de 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)

Par souci de simplicité, j'ai supprimé les colonnes non pertinentes, supprimé orderby et remplacé la variable @ _msparam_0 par sa valeur 1

owner_sid est égal à 0x01 uniquement pour les bases de données système. Vous pouvez donc l'utiliser pour reconnaître si la base de données est une base de données système ou non.

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

non, il n'y a pas une telle option, autant que je sache. Je suppose que vous pouvez vérifier l’identifiant sys.databases.owner_sid = 0x01.

Je ne pense pas que vous ayez à vous soucier de la modification du nom de la base de données par MS. s’ils le faisaient, vous n’auriez pas à vous en inquiéter pendant au moins 20 ans:)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top