SQL Server:データベースがシステムデータベースであるかどうかを確認する方法
-
10-07-2019 - |
質問
これまでのところ(少なくとも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]
要するに、データベースの名前がmaster
、model
、msdb
、または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年間心配する必要はありません:)