2011-03-16 3 views
4

SQL Server 2008의 데이터베이스에서 (2005 년과 2000 년의 차이점을 알고 싶다면) 어떤 이유로 든 테이블에 대해 object_id가 변경되었는지 알고 싶습니다.SQL Server에서 개체의 object_id가 변경 될 수 있습니까?

Ex. ID를 삭제하고 생성하여 테이블 변경을 변경하고 테이블을 변경하는 다른 방법과 반대되는 방식으로 테이블을 변경하는 경우를 선택합니다.

나는 흰색 종이 또는 MSDN 문서처럼, 말하자면 매우 콘크리트의 웹 아무것도 찾을 수가 없었다. 나는이 대화를 찾았습니다 : http://sql-server-performance.com/Community/forums/p/5918/167487.aspx

처음에 대화는 기본적으로 "아니오"이며 180을하는 것으로 보입니다. 나는 또한 어떤 대답에 대해서도 합법적 인 인용문을 찾고 있습니다. 나는 그 행동이 바뀌는 이상한 상황에 대비하여 실제 SQL Server 디자인에 대한 재미있는 실험에 관심이 없다. 예를 들어, 테이블이 비어있는 경우에만 테이블을 삭제하고 다시 작성하여 테이블을 변경할 수 있습니다. 하지만 데이터가 있다면 이드는 바뀌지 않을 것입니다 ... 등등. 나는 누군가가 겉으로보기에는 정확하지만 불완전한 대답을 어떻게 내놓을 수 있는지를 볼 수 있습니다. 이 질문의 긴 호흡 가능성이 충분히 설명하고 까다로운 성격에 미리

죄송합니다.

+0

해결 방법은 object_id의 지속성이 필요합니까? 달성하려는 목표를 달성하기위한 다른 방법이있을 수 있습니다. –

+0

그 스레드는 내가 볼 수있는 한 180을 수행하지 않는 것 같습니다. SSMS에서 ID 속성을 변경하는 예는'alter table' 작업이 아닙니다. SSMS는 테이블을 삭제하고 다시 만듭니다. –

답변

4

object_id는 개체 생성시 할당됩니다. 변경되는 유일한 시간은 오브젝트가 재생성되는 경우입니다.

SSMS가 실제로 백그라운드에서 수행하는 작업 중 일부는 실제로 테이블을 삭제하고 다시 생성하는 작업을 포함합니다. (경우에 따라 가능하지 않아도 가능). 예를 들어 표의 중앙에 열을 추가하면 삭제하고 다시 작성해야하므로 새 object_id가 필요합니다. 어떤 경우

, 당신은 단지 object_id([objectname])

+1

"어쨌든 데이터베이스 어디서나 object_id를 유지하면 안됩니다."- 내가 정말로 알아야 할 것 같은 소리가납니다! – justin

1

한 가지 방법을 사용하여 다시 때마다 그것을 쿼리 어디서나 데이터베이스에서 OBJECT_ID를 유지 결코해야 OBJECT_ID 지속 될 수있다, 무의식적으로, 일부 "영리"프로그래머 경우 테이블 이름 대신 objectids를 사용하는 auditTrail 테이블을 만들었습니다 (이 테이블이 영리한 아이디어인지 아닌지를 결정합니다). 데이터가 변경되면 object_id() 및 ID 열이 저장됩니다.

아직 답변이 안된 질문은 object_id 값이 실제로 다른 서버로 데이터베이스 복원, SQL Server 버전 업그레이드, 다른 클러스터 호스트 간의 데이터베이스 장애 복구 ("; 좋은 생각 NO"나는 위에서 응답 한 것으로 판단) 등

는 OBJECT_ID의 지속 된 값을 사용하여 시도하는 것이 좋습니다 여부를

또 다른 질문입니다. SSMS 방울과 오른쪽 SQL 서버는 내부적으로 테이블을 재현 같이 OBJECT_ID이 변경됩니다

+0

* 영리한 *과 * 사이에 훌륭한 라인이 있습니다. * 및 * 공학적으로 * 및 * 배트 똥 미친 * – SQLMason

0

를 OBJECT_ID 사용하지 할 수있는 충분한 이유가 있다고, 뒤에서 테이블을 다시 작성합니다. 대신 (또는 추가로) 데이터베이스 이름을 저장하십시오.

관련 문제