SQL Server:データベースがシステムデータベースであるかどうかを確認する方法

StackOverflow https://stackoverflow.com/questions/1819095

質問

これまでのところ(少なくともMSSQL 2005まで)、システムデータベースはmaster、model、msdb、tempdbであることを知っています。

事柄は、私が知る限り、将来的に保存されるとは限りません。また、sys.databasesビューもsys.sysdatabasesビューも、データベースがシステムデータベースと見なされるかどうかを教えてくれません。

この情報(データベースがシステムデータベースと見なされるかどうか)を取得できる場所はありますか?

役に立ちましたか?

解決

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]

要するに、データベースの名前がmastermodelmsdb、またはtempdbの場合、それはシステムdbです。 ビューis_distributor = 1のフィールドsys.databasesの場合は、システムデータベースでもあります。

これが役立つことを願って

ジミー

他のヒント

DB_ID()関数に依存できます<!> lt; = 4

これを変更するには非常に一生懸命働く必要があります...

SQL Server Management Studioはこれを使用します

<!> quot; System Databases <!> quot;を展開した場合<!> quot; Object Explorer <!> quot; (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)

簡単にするために、無関係な列を削除し、orderbyを削除し、@ _ msparam_0変数をその値1に置き換えました

owner_sidは、システムデータベースの場合のみ0x01です。 したがって、データベースがシステムDBかどうかを認識するために使用できます。

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

いいえ、そのようなオプションはありません。 sys.databases.owner_sid = 0x01のidを確認できると思います。

iは、MSがシステムdb名を変更することを心配する必要はないと思います。彼らが演劇をやったなら、少なくとも20年間心配する必要はありません:)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top