2016-07-11 2 views
0

지난 주 한 요구 사항의 일부로 모든 데이터베이스 개체에 대한 개체 정의를 생성하는 스크립트를 작성했습니다.sys.objects [name] 열이 정의 (저장 프로 시저 이름)의 개체 이름과 일치하지 않습니다.

테스트하는 동안 몇 가지 저장 프로 시저에 대해 [sys.objects] .name이 실제 개체 정의 (OBJECT_DEFINITION (Object_ID)에 의해 반환 됨)에서 이름과 일치하지 않는 것으로 나타났습니다. 그것은 매우 이상했고 나는 인생에서 처음으로 그것을 보았습니다.

같은 이유가 될 수 있다고 생각하면서 개체 탐색기 (SQL Server Management Studio의보기 -> 개체 탐색기)에서 저장 프로 시저의 이름을 바꿀 때 발생하는 것으로 나타났습니다.

궁금한 점이 있다면 실제 개체 이름 (이 경우 SP 이름)을 검색 할 수있는 방법이 있습니까?

+0

사용하시는 질문과 실제 답변을 올리십시오 – TheGameiswar

+0

그것은 간단한 쿼리입니다. SELECT OBJECT_DEFINITION (Object_ID), [name] FROM sys.objects 여기서 name = '{Object name}' –

답변

0

비슷한 상황에서 sp_rename을 사용하여 저장 프로 시저의 이름이 바뀌 었습니다. 사용 된 새 이름은 * _1 확장자로 반복되었습니다. 원래 이름이 'MyProcedure'인 경우 새 이름은 'MyProcedure_1'이었습니다.

'MyProcedure'는 프로덕션 코드를 나타냅니다. 'MyProcedure_1'은 한 번에 프로덕션 코드 였지만 현재는 사용되지 않는 코드를 나타냅니다. 실제로 'MyProcedure_1'은 데이터베이스에 더 이상 존재하지 않는 개체를 참조했습니다.

sys.objects에서 이름을 볼 때 확장명이있는 새 이름 ('MyProcedure_1')이 있지만 object_definition은 이전 이름 ​​('MyProcedure')을 반환했지만 'MyProcedure_1'코드는 반환했습니다.

누락 된 개체로 인해 오류가 발생한 'MyProcedure'에 대한 호출을 통해 발견되었습니다.

해결 방안은 object_id와 잘못된 object_definition을 효과적으로 제거한 DROP 'MyProcedure_1'에 대한 것이 었으며이를 다시 작성했습니다. 물론 우리는 누락 된 객체를 처리해야했습니다. 그리고 우리는 표/열 이외의 객체에 대해 sp_rename을 사용하는 것에 대해주의를 기울였습니다.