1

: 내 하루의 대부분을하고있다으로 데이터베이스를 리팩토링 할 때 종종SQL Server 2008 고아 저장 프로 시저? 내가이 전에 본 적이 없다</p> <p>SQL Server Management Studio를 통해 SQL Server 2008을 사용하고

, 내가 사용하는 찾기 위해 다음과 같은 기존 절차의 열, 테이블 및 기타 절차에 대한 참조 :이 특별한 아무것도 없다

select * 
from sys.sql_modules 
where [definition] like '%SomethingImLookingFor%' 

, 나는 데이터베이스 헤드의 확인 많은 전에 그것을 짓을 해요.

그러나 나는 (실제로 생성 된 경우) 총 사고로 보인 절차가 결과에 포함되어 있음을 확인했습니다. 데이터베이스에서 나는 ChatObject_Remove이라는 프로 시저를 가지고 있는데, 이는 %Remove%이라는 용어를 참조하는 것을 찾고 있었기 때문에 내 쿼리에 나타났습니다. 그러나 나는 또한 확장 할 때 SSMS에서

zzChatObject_Remove라는 유령 절차를 참조 데이터베이스의 내가 ChatObject_Remove를 참조 Programmability -> Stored Procedures 있지만 zzChatObject_Remove.

이 그룹을 새로 고치려고했지만 고스트가 표시되지 않습니다.

나는 존재하지 않았다 중 하나를 말하는 오류를 반환 문

drop procedure [dbo].[zzChatObject_Remove] 

를 사용하려고 또는 내가 권한이 없습니다. 나는 프로 시저를 만들려고

zzChatObject_Remove라고 그것은 내가 그것을 할 수 (하지만 지금은 create procedure zzChatObject_Remove ...에 대한 정의와 sql_modules 2 개체를했다). 그런 다음 허용 된 새 파일을 삭제했습니다. 예상대로 유령은 모듈 테이블에 있으며 필자는이를 만질 수 없습니다.

이전에 본 사람이 있습니까? 이 다른 곳은 어디 있겠습니까? 어떤 해를 끼칠 수 있습니까? sys.sql_modules 테이블에서이 겉으로보기에는 고아 인 절차를 제거하려면 어떻게해야합니까?

미리 알려 주셔서 감사합니다.

그냥 내 행운, 할로윈시기에 유령 ...

+0

다른 스키마에 있는지 확인 했습니까? – RBarryYoung

+0

데이터베이스 컨텍스트에서이 문을 실행하고 데이터베이스가 생성되었을 때의 위치를 ​​알려주는 정보를 제공하는지 확인하십시오. select * from sys.procedures 여기서 [type] = 'P' –

+0

저장 프로 시저 이름에 후행 공백이나 유니 코드 문자가 있습니까? –

답변

0

이가 오는 곳 보려면이 시도보고 :

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%' 

을, 확인하려면이 proc가 sql_modules에 정의되어 있습니까? 아니면 다른 프로 시저의 코드에서 참조 되었기 때문에 표시되고 있습니까?