Подтвердить что ты не робот

SQL Server: как определить, является ли база данных системной базой данных?

Я знаю, что до сих пор (до MSSQL 2005 как минимум), системными базами данных являются master, model, msdb и tempdb.

Вещь, насколько я могу судить, не гарантируется в будущем. И ни представление sys.databases, ни представление sys.sysdatabases не говорят мне, если база данных рассматривается как системная база данных.

Можно ли найти где-нибудь, где эта информация (будь то база данных считается системной базой данных или нет)?

4b9b3361

Ответ 1

Просто погрузился в объект Microsoft.SqlServer.Management.Smo.Database (который предоставлен самой Microsoft!) Они просто делают это, используя следующую инструкцию:

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

Вкратце: если база данных называется master, model, msdb или tempdb, она является системой db; это также система db, если поле is_distributor = 1 в представлении sys.databases.

Надеюсь, что это поможет

Джимми

Ответ 2

Вы можете положиться на функцию DB_ID() <= 4

Вам нужно будет очень много работать, чтобы изменить это...

Ответ 3

owner_sid равен 0x01 только для системных баз данных. Поэтому вы можете использовать его, чтобы узнать, является ли база данных системной БД или нет.

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

Ответ 4

нет такой опции AFAIK. я думаю, вы могли бы проверить id sys.databases.owner_sid = 0x01.

Я не думаю, что вам нужно беспокоиться о том, что MS меняет имена системных db. если бы они это сделали, вам не пришлось бы беспокоиться об этом не менее 20 лет:)