选择查询以获取数据库对象

Xam*_*Dev 1 sql-server-2008

我有数据库,其中包含大量的表,存储过程.那么,我如何在特定数据库的单个查询中获取表,存储过程等特定对象.

Aar*_*and 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');
Run Code Online (Sandbox Code Playgroud)

您可以在此网站或其他网站上找到的其他一些答案可能会提示以下部分或全部内容:

  • sysobjects- 远离,这是一个已弃用的向后兼容性视图,不应在任何版本> SQL Server 2000中使用.请在此处查看完整但不详尽的替换映射.

  • 内置的功能一样OBJECT_NAME(),SCHEMA_NAME()而且OBJECT_SCHEMA_NAME()-我推荐的这些我自己这些年来,直到我意识到他们被阻止的功能和不遵守事务的隔离语义.因此,如果您希望在发生潜在变化的情况下在未提交的读取下获取此信息,则不能,您将不得不等待.这可能是你想要做的,但并非总是如此.

  • INFORMATION_SCHEMA- 这些视图是为了满足标准,但是不完整,被警告是不准确的,并且没有更新以反映新功能(我在这里写了几个具体问题的博客).因此,对于非常基本的信息(或者当您需要编写跨平台元数据代码时),它们可能没问题,但在几乎所有情况下,我建议您始终使用您可以信任的方法,而不是选择和选择.