【发布时间】:2013-07-09 11:46:54
【问题描述】:
我有一个 SQL Server 2008 R2 数据库,其中包含一个可能存在也可能不存在的存储过程。
如果我运行sp_help spThing,它会返回一行,就好像它存在一样(名称:spThing,所有者:dbo,类型:存储过程)。
如果我尝试创建具有相同名称的新存储过程,我会收到错误消息“数据库中已经有一个名为 'spThing' 的对象”。
但是
如果我运行SELECT OBJECT_ID('dbo.spThing'),它返回NULL。
如果我运行 EXEC spThing,它会显示“找不到存储过程 'spThing'”。
如果我运行 DROP spThing,它会显示“无法删除过程 'spThing',因为它不存在或您没有权限”。
如果我运行SELECT * FROM sys.objects WHERE name = 'spThing',我没有行。
如果我运行SELECT * FROM INFORMATION_SCHEMA.ROUTINES WHERE ROUTINE_NAME = 'spThing',我没有行。
所有这些都是以管理用户身份从同一个连接运行的。
存储过程是否存在?
编辑:
SP 本身是一个微不足道的选择,大致如下:
CREATE PROCEDURE spThing
@Param int
AS
BEGIN
SELECT strThing
FROM tblThing
WHERE lngParam = @Param;
END
【问题讨论】:
-
请提供您的sp的
DDL。 -
这只是一个琐碎的选择查询,添加到问题中。
-
很奇怪,如果对象存在
OBJECT_ID('<schema>.<object_name>')总是不为空。检查您的默认架构名称。 -
我知道 :-S 我想知道 SQL Server 是否有多个地方在内部存储对象,出于某种原因,我在一个地方而不是另一个地方。
-
您是否尝试过重启 SQL Server 实例?
标签: sql sql-server stored-procedures