我跟踪了一个存储过程,如 SQL Server 2005 Profiler 中所示。未找到但有效。为什么?

StackOverflow https://stackoverflow.com/questions/85181

这很奇怪。

我打开了探查器,它显然显示调用了一个存储过程。我打开数据库和SP列表,但SP不存在。然而,还有另一个 SP,其名称相同,只是有一个前缀“x”

SQL Server 2005 是否出于安全目的将 SP 名称映射到其他名称?

编辑:我发现它是一个同义词,不管是什么。

有帮助吗?

解决方案

一般来说,当您知道某个对象存在,因为它已在查询中使用,并且您无法在 Management Studio 的对象树中找到它时,您可以执行此操作来查找它。

select *
from sys.objects
where name = 'THE_NAME_YOU_WANT'

我刚刚检查过,它可以与同义词一起使用。

其他提示

可能是愚蠢的问题,但以防万一......SP列表刷新了吗?您是否检查过不同所有者下同名的存储过程?如果您创建存储过程时未指定所有者,则它可能位于您所有权下的列表中(或者,如果列表仅过滤为“dbo”,则根本不存在)。

您可能没有权限查看数据库中的所有对象

添加到前面的答案,它也可能位于“系统存储过程”下,如果存储过程的名称以“sp_”开头,它也可能位于主数据库中。

存储过程将位于您在创建存储过程时选择的数据库内。因此,请在从中提取数据的数据库内部进行搜索,否则它将在主数据库内部。如果您仍然找不到,那么第一个数字解决方案是最好的解决方案。IE。

select * from sys.objects where name = 'name of stored procedure'
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top