[英]SQL Server 2008 Orphaned Stored Procedure?
我正在通过SQL Server Management Studio使用SQL Server 2008
我以前从未见过:
通常,当我一整天都在重构数据库时,我使用以下内容在现有过程中查找对列,表和其他过程的引用:
select *
from sys.sql_modules
where [definition] like '%SomethingImLookingFor%'
这没什么特别的,我敢肯定很多数据库负责人以前都做过。
但是,我注意到结果包含一个过程,该过程在创建时似乎完全是偶然的(如果曾经创建过)。 在数据库中,我有一个名为ChatObject_Remove
的过程,该过程出现在我的查询中,因为我正在寻找任何引用术语%Remove%
。 但我也看到了一个名为zzChatObject_Remove
的幻影过程
在SSMS中,当我扩展数据库的Programmability -> Stored Procedures
,看到的是ChatObject_Remove
,但没有看到的zzChatObject_Remove
。
我尝试刷新此组,但仍然没有出现该幻影。
我尝试使用该语句
drop procedure [dbo].[zzChatObject_Remove]
它返回一个错误,指出它要么不存在,要么我没有权限。
我尝试创建一个名为zzChatObject_Remove
的过程,它允许我执行此操作(但现在sql_modules
有2个对象, sql_modules
带有create procedure zzChatObject_Remove ...
的定义)。 然后,我删除了它所允许的新文件,并且该鬼影仍在模块表中,正如我所料,我无法触摸它。
谁看过这个吗? 这还能在哪里呢? 会造成伤害吗? 如何摆脱sys.sql_modules
表中看似孤立的过程?
预先感谢您的任何投入。
只是我的运气,在万圣节前夕看到一个幽灵...
试试看它出现在哪里:
exec sp_MSforeachdb '
select ''?'' [db]
, s.name [schema]
, o.name [object]
, o.type_desc
from [?].sys.objects o
inner join sys.schemas s
on s.schema_id = o.schema_id
where o.name = ''zzChatObject_Remove''
'
或以下内容:
select *
from sys.sql_modules sm
inner join sys.objects o
on o.object_id = sm.object_id
inner join sys.schemas s
on s.schema_id = o.schema_id
where sm.description like '%zzChatObject_Remove%'
另外,要检查此过程是在sql_modules中定义的,还是因为在另一个过程的代码中引用了它而显示出来?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.