テーブル「sys.all_objects」内のオブジェクトのスキーマ名を取得するにはどうすればよいですか?
OBJECT_SCHEMA_NAME 関数を使用すると、スキーマが dbo であることがわかっている場合に「sys」が返されます...
select OBJECT_SCHEMA_NAME(o.schema_id),* from sys.all_objects o
別のビューを使用したくありませんが、必要に応じて他のテーブルに参加できます。
テーブル「sys.all_objects」内のオブジェクトのスキーマ名を取得するにはどうすればよいですか?
OBJECT_SCHEMA_NAME 関数を使用すると、スキーマが dbo であることがわかっている場合に「sys」が返されます...
select OBJECT_SCHEMA_NAME(o.schema_id),* from sys.all_objects o
別のビューを使用したくありませんが、必要に応じて他のテーブルに参加できます。
Use "object_id" not "schema_id"
select OBJECT_SCHEMA_NAME(o.object_id),* from sys.all_objects o
などのシステムオブジェクトについて話しているのsp_helptext
ですか? sp_helptext
複数の形式を使用して およびその他のシステム オブジェクトを呼び出すことができます。これらは自動的に変換されます (主に下位互換性のため)。
EXEC sp_helptext 'sp_helptext';
EXEC dbo.sp_helptext 'sp_helptext';
EXEC sys.sp_helptext 'sp_helptext';
SELECT * FROM sysobjects;
SELECT * FROM dbo.sysobjects;
SELECT * FROM sys.sysobjects;
ただし、オブジェクトは 1 つのスキーマにのみ属することができます。この場合sys
も同様に応答しdbo
ます。
として表示されているユーザー オブジェクトがある場合は、そのsys
内容をお知らせください。ユーザー オブジェクトを追跡しようとしているだけの場合は、スキーマの下dbo.foo
にも存在する何かに名前を付けた可能性があります。システムオブジェクトを返したくない場合は、代わりにsys
提案するかもしれません。sys.objects
sys.all_objects
編集:
レイが指摘したようschema_id
に、関数に渡しています。ドキュメントobject_id
には、 ではなくを渡す必要があることが示されていますschema_id
。したがって、次のいずれかを実行します。
SELECT OBJECT_SCHEMA_NAME(o.[object_id]),* FROM sys.all_objects o;
-- or
SELECT SCHEMA_NAME(o.[schema_id]),* FROM sys.all_objects o;
個人的には、結合を好みます。
SELECT s.name, o.* FROM sys.all_objects AS o;
INNER JOIN sys.schemas AS s
ON o.[schema_id] = s.[schema_id];
なんで?このクエリは複数のデータベースで機能しますが、メタデータ関数のいくつかは NULL を返すか、さらに悪いことに、別のデータベースから呼び出すと間違ったオブジェクトを返します。
これを試して:
select OBJECT_NAME(o.object_id),* from sys.all_objects o
列を選択することもできますname
:
select o.name,* from sys.all_objects o