我有数据库,其中包含大量的表,存储过程。所以, 如何在特定数据库的单个查询中获取表,存储过程等特定对象。
答案 0 :(得分: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. See a thorough but not exhaustive replacement map here。
内置函数,例如OBJECT_NAME()
,SCHEMA_NAME()
和OBJECT_SCHEMA_NAME()
- 多年来我一直推荐这些函数,直到我意识到它们是blocking functions and don't observe the transaction's isolation semantics。因此,如果您希望在发生潜在变化的情况下在未提交的读取下获取此信息,则不能,您将不得不等待。这可能是你想做的,但并非总是如此。
INFORMATION_SCHEMA
- 这些视图符合标准,但不完整,警告不准确,并且不会更新以反映新功能(I blogged about several specific problems here)。因此,对于非常基本的信息(或者当您需要编写跨平台元数据代码时),它们可能没问题,但在几乎所有情况下,我建议您始终使用您可以信任的方法,而不是选择和选择。