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?
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
.
Jimmy
Pode confiar na função DB_ID () Terias de te esforçar muito para mudar isto...
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