我有一个带有存储过程的 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