1

膨大な数のテーブル、ストアド プロシージャを含むデータベースがあります。では、特定のデータベースに対する単一のクエリで、テーブル、ストアド プロシージャなどの特定のオブジェクトを取得するにはどうすればよいでしょうか。

4

1 に答える 1

5
SELECT 
  [schema] = s.name, 
  [object] = o.name,
  o.type_desc
FROM sys.objects AS o
INNER JOIN sys.schemas AS s
  ON o.[schema_id] = s.[schema_id]
WHERE o.[type] IN ('P','U');

このサイトまたは他のサイトで見つかる他の回答は、次のいくつかまたはすべてを示唆している可能性があります。

  • sysobjects- 近づかないでください。これは推奨されなくなった下位互換性ビューであり、SQL Server 2000 以降のどのバージョンでも使用しないでください。完全ではあるが完全ではない代替マップを参照してください

  • OBJECT_NAME()SCHEMA_NAME()およびのような組み込み関数OBJECT_SCHEMA_NAME()- 私はこれらが関数をブロックしていて、トランザクションの分離セマンティクスを観察していないことに気付くまで、何年にもわたってこれらを自分自身に推奨してきました。そのため、基になる変更が発生しているときにこの情報を read uncommitted で取得したい場合は、それができず、待つ必要があります。これはあなたがやりたいことかもしれませんが、常にではありません。

  • INFORMATION_SCHEMA- これらのビューは標準を満たすためにありますが、完全ではなく、不正確であると警告されており、新しい機能を反映するように更新されていません (ここでいくつかの特定の問題についてブログを書きました)。したがって、非常に基本的な情報 (またはクロスプラットフォームのメタデータ コードを記述する必要がある場合) には問題ないかもしれませんが、ほとんどの場合、選択して選択するのではなく、常に信頼できる方法を使用することをお勧めします。

于 2013-10-04T18:58:19.780 に答える