2009-11-30 22 views
12

これまで(少なくともMSSQL 2005まで)、システムデータベースはmaster、model、msdb、およびtempdbです。SQL Server:データベースがシステムデータベースであるかどうかを確認する方法

これは、私が知る限り、これは将来的には保証されないということです。また、sys.databasesビューもsys.sysdatabasesビューも、データベースがシステムデータベースと見なされるかどうかはわかりません。

この情報(データベースがシステムデータベースと見なされるかどうか)がどこで得られますか?

答えて

16

ちょうど 彼らだけで、この使用して、次のステートメントを実行します(!マイクロソフト自体によって提供される)Microsoft.SqlServer.Management.Smo.Databaseオブジェクトに潜っ,msdbまたはtempdbの場合、システムDBです。 ビューsys.databasesのフィールドis_distributor = 1の場合は、システムデータベースでもあります。

ホープこれは

ジミー

+0

ジミーは他のユーザーが見逃したことを捉えました。レプリケーションを有効にすると、SQL Serverは「distribution」という名前のシステムデータベースを追加します。 –

-5

いいえAFAIKはありません。私はあなたがidをsys.databases.owner_sid = 0x01をチェックすることができたと思います。

MSがシステムのdb名を変更するのを心配する必要はありません。彼らはtheatあなたは少なくとも20年以上:)

0

のためにそれを心配する必要はありませんでした場合は、DB_ID()関数< = 4

に頼ることができますあなたは変化に非常に懸命に働く必要があるだろう要するに

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

:データベースはmasterを命名されている場合、0この...

+0

DB_ID()はsys.sysdatabasesのdbid列を返します。 –

+0

@Vinko:はい、あります – gbn

+6

これは当てはまりません。ディストリビューターデータベースをお持ちの場合は、id> 4でシステムデータベースです。 – Kevin

-3

owner_sidは、システムデータベースのためだけでは0x01に等しいことができます。 これは、データベースがシステムDBであるかどうかを認識するために使用できます。

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

これは良い考えではありません。なぜなら 'sa'、system、またはnot所有のデータベースを返すからです。 –

+0

これはSql Azureでは動作しません。マスターdbは0x01以外のsidを持ちます。 –

関連する問題