2011-06-29 18 views
2

データベースにあるすべてのオブジェクトを確認するためにdbo.sysobjectsを照会すると、名前が 'syncobj_'で始まるすべてのシステムビューも取得されます。これらはxtypeが 'V'であり、ビューの名前を調べる以外はシステムビューではなく、自分のものではないことがわかります。別の方法がありますか?私は作成中のクエリからこれらを除外したいと思います。SQL Server - sysobjectsの照会

select * 
from sysobjects 
where name NOT IN (
    select name from sys.system_views 
) 
+1

あなたはこのSO Q/Aをチェックアウトすることができます:あなたは、SQL Serverののhttp://stackoverflow.com/questions/2910077/what-is-syncobj-in-sql-server – bzarah

+0

どのバージョンを使用しています?これはあなたが得る応答の妥当性や質に影響を与える可能性があります。例えば、あなたが2005年以上の人であれば、sysobjectsよりも良い答えがあります。正確な(または最小)バージョン(タグ "sql-server-2008"など)でタグを提案する。 –

+0

@Aaron - データベース内のすべてのオブジェクトの完全なリストを表示するには、sysobjectsよりも優れたオプションはありますか?私は情報スキーマビューを使用することができると理解していますが、次にそれらのダースをクエリする必要があります。 Using 2008. –

答えて

0

のようなものを試してみてください

SQL Serverのインストール時に作成した任意のスキーマスコープオブジェクト

オブジェクトをIsMSShipped。 1 =真0 = Falseの

のようなもの、それを使用します。

SELECT * from sysobjects where OBJECTPROPERTY(ID,N'IsMSShipped') = 0 

それはドキュメントだ少しオフになっているけれども - それはまた、他のオブジェクトを除いて、あなたを支援し、後日、SQL Serverの「で」追加また - 例えばレプリケーションに関連するオブジェクトもすべてIsMSShippedとみなされます。

+1

おそらく実際にobject_idを使用するほうがよいでしょう。 '選択* からsysobjects idは( \t選択object_idからsys.system_views )' –

+0

テーブルに参加することを忘れないでください。 select * from sysobjectsここで、idはINではありません(sys.system_viewsからobject_idを選択します。sysobjects.id = object_id)。 –

+0

これにより、システムテーブルやその他のオブジェクトが引き続き使用できます。 –

0

SQL Server 2008を使用しているため、古い互換性ビューsysobjectsを使用する理由はほとんどありません。代わりに、SQL Server 2005で導入されたカタログビューsys.objectsを使用する必要があります。追加のボーナスとして、is_ms_shippedという列が含まれているため、外部のOBJECTPROPERTY()関数を呼び出す必要はありません。同じ情報。

SELECT OBJECT_SCHEMA_NAME([object_id]), name, type 
FROM sys.objects 
WHERE is_ms_shipped = 0; 
+0

これは依然としていくつかのシステムオブジェクトを返します。 dtpropertiesテーブル(データベースにダイアグラムサポートを追加した場合に追加されます)は、MS出荷されたものではなくユーザーテーブルです。 –

関連する問題