6

SQL サーバー (2005 以降) で複数のデータベースに対してクエリを実行する場合、システム データベース (マスター、モデル、tempdb、msdb、ディストリビューション) を除外する必要がある場合があります。

これら以外にこれらをフィルタリングする他の方法はありますか

where name not in (''master', 'model', 'tempdb', 'msdb', 'distribution')

sys.databases と master.dbo.sysdatabases を見てきました(同じではありません!)

[更新]ログ配布が有効になっているデータベースを探すために使用するクエリの例

select d.name, p.last_backup_date, s.secondary_server, s.secondary_database
from sys.databases d
    left outer join msdb..log_shipping_primary_databases p on p.primary_database = d.name
    left outer join msdb..log_shipping_primary_secondaries s on s.primary_id = p.primary_id
where name not in ('model','master','tempdb','distribution','msdb')
order by d.name

[更新] 他の誰かがより良い方法を持っていない限り、これは「最も悪い」方法のようですか?

SELECT * FROM 
master.sys.databases AS dtb 
WHERE (dtb.database_id < 5 or dtb.is_distributor = 1)
4

3 に答える 3

8

SQL プロファイラーを実行し、管理スタジオのシステム データベース ノードを更新しました。クエリを使用します

...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)

dbidしたがって、とis_distributorチェックを組み合わせることができると思います。

于 2010-08-03T14:34:33.643 に答える
3

名前で検索する以外に安全な手段はありません。4 つのメイン データベース (master、model、msdb、tempdb) のみを除外したい場合は、安全にフィルター処理できますDBID > 4。ただし、分散データベースは通常のデータベースと同様に DBID を取得するため、その DBID に依存することはできません。

于 2010-08-03T14:23:00.403 に答える
-1
select
    *
from
    sys.databases
where
    name in ('master','model','msdb','tempdb')
    or is_distributor = 1
于 2016-03-21T10:33:49.403 に答える