在 sys.procedures 中看不到某些存储过程

Way*_*itz 0 sql-server stored-procedures documentation sql-server-2012

记录数据库并发现我看不到 中的存储过程sys.procedures,即使我可以在对象资源管理器中看到它们。

select p.name, x.value, p.modify_date
from sys.procedures p
left join sys.extended_properties x
on p.object_id = x.major_id
where p.is_ms_shipped = 0
and p.name NOT LIKE 'sp_%'
Run Code Online (Sandbox Code Playgroud)

Aar*_*and 5

为确保您可以看到您正在寻找的对象:

  • 确保您在正确的数据库/正确的实例中 - 看起来简单而愚蠢,但它一直在发生。这还包括不在AttachDbFileName连接字符串中使用类似的东西——这意味着两个不同的程序实际上将拥有数据库的两个单独副本,因此如果一个程序添加了一个过程,另一个程序将永远不会看到它。
  • 不要添加没有完成任何事情的不必要的过滤器(sys.procedures已经过滤掉了系统对象,并且如果您将sp_前缀用于自己的过程 -您不应该这样做 - 您可能不希望该过滤器将这些对象排除在外,任何一个)。
  • 验证您是否有权VIEW DEFINITION访问这些对象可能存在的所有潜在模式。这些将在元数据/目录视图中受到保护,但在对象资源管理器下的某些情况下仍可能向您公开(尤其是当您的对象资源管理器连接在与查询窗口不同的上下文下运行时)。

另请注意,这些也是未来读者的潜在答案,而不仅仅是针对当前的 OP(我们现在知道他们对最后一个项目符号有问题)。