你可以试试
select object_name(id)
from syscomments
WHERE COLID=1 AND
OBJECTPROPERTY(id, 'isprocedure')=1 and
REPLACE(REPLACE(TEXT,CHAR(13),' '),CHAR(10),' ')
NOT LIKE '%CREATE%PROC%'+ object_name(id) + ' %'
AND
(REPLACE(REPLACE(TEXT,CHAR(13),' '),CHAR(10),' ')
NOT LIKE '%CREATE%PROC%'+ object_name(id) + ']%')
SYS.SQL_MODULES
如果您在
CREATE PROC
比特。
一个比自己解析文本更健壮的解决方案是生成一个脚本来运行以重新编译所有存储过程。如果你运行下面的…
SELECT 'EXEC sp_refreshsqlmodule ''' +
quotename(schema_name(schema_id)) + '.' +
quotename(object_name(object_id)) + ''''
FROM sys.procedures
…然后将结果复制并粘贴到Management Studio查询窗口中,并执行结果脚本。对于名称不同步的情况,它会给您一个错误。
这将导致重新编译所有存储过程计划,因此如果这是一个问题,请不要在生产服务器上执行此操作。
编辑以提供有关Bug的其他信息。
如果有任何可能
sp_rename
已用于交换两个对象的定义。
sp_refreshsqlmodule
apparently has a bug in that situation!