Servidor SQL: como dizer se um banco de dados é um banco de dados do sistema?

sei que até agora (pelo menos até ao MSSQL 2005), as bases de dados do sistema são master, model, msdb e tempdb.

A questão é que, tanto quanto sei, isto não está garantido para ser preservado no futuro. E nem o sys.bancos de dados ver nem o sys.ver sysdatabases diga-me se uma base de dados é considerada como uma base de dados do sistema.

Existe algum lugar onde esta informação (se uma base de dados é considerada uma base de dados do sistema ou não) pode ser obtida?

Author: Vinko Vrsalovic, 2009-11-30

4 answers

Mergulhou apenas em Microsoft.SqlServer.Management.Smo.Database objecto (que é fornecido pela própria Microsoft!) Eles simplesmente fazem isso usando a seguinte declaração:

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

Em resumo: se uma base de dados for chamada master, model, msdb ou tempdb, é um sistema db; é também um db do sistema, se o campo is_distributor = 1 na vista sys.databases.

Espero que isto ajude.

Jimmy

 17
Author: Jimmy, 2017-03-15 10:40:06

Pode confiar na função DB_ID () Terias de te esforçar muito para mudar isto...

 0
Author: gbn, 2009-11-30 11:17:35

Owner_sid é igual a 0x01 apenas para as bases de dados do sistema. Então você pode usá-lo para reconhecer se a base de dados é um DB sistema ou não.

select * from sys.databases
where owner_sid != 0x01
 -4
Author: Soheil Bakhshi, 2013-04-30 02:23:37
Não existe tal opção. acho que podes verificar a identificação do sistema.banco.owner_sid = 0x01. Acho que não tens de te preocupar com a mudança dos nomes dos db do sistema. se o fizessem, não terias de te preocupar com isso durante pelo menos 20 anos.
 -6
Author: Mladen Prajdic, 2009-11-30 11:09:55