2017-10-30 4 views
1

일반적으로 버전 데이터를 표시하려면 rowversion 유형의 열을 추가해야하지만이 작업은 큰 테이블에서 꽤 오래 걸립니다. 어쨌든 dev 샌드 박스 환경에서 그 작업을 수행했는데 실제로 시간이 걸렸지 만 열이 의미있는 초기 값으로 채워져 있음을 발견했습니다. 각 행이 일종의 "초기"상태임을 나타 내기 위해 모든 행이 0이 될 것으로 예상했으나 (결국이 전에는 기록이 없었습니다), 각 행의 정확한 값처럼 보입니다. 모두 다르며 기본값이 아닌 값).열을 추가하지 않은 SQL Server rowversion

그들은 어디서 왔습니까? rowversion이 열에 노출되었는지 여부에 관계없이 어쨌든 장면 뒤에서 추적되는 것으로 보입니다. 그렇다면 열을 추가하지 않고 직접 가져올 수 있습니까? 내가 직접 호출 할 수있는 일종의 시스템 기능일까요? 난 정말 다운 타임을 피하기 위해, 그리고 또한 다른 테이블 /보기/콤보로 마이 그 레이션 (다른 관련 질문에 제안) 옵션이 아니므로 기존 쿼리의 엄청난 숫자가 있습니다.

답변

1

rowversion (a.k.a timestamp) 값이있는 테이블을 수정하면 rowversion 값이 생성됩니다. rowversion 값은 데이터베이스 범위이며 마지막 생성 된 값은 @@DBTS을 통해 검색 할 수 있습니다.

rowversion 테이블을 수정할 때만 값이 증가하기 때문에 가동 중지 시간을 피하기 위해 @@DBTS을 사용할 수 있다고는 생각하지 않습니다.

+0

그러나 그렇다면 기존 테이블에 열을 추가했을 때 어떻게 겉으로보기에 "올바른"값으로 열을 초기화 할 수 있었습니까? 열이 존재하기 전에도'rowversion '이 생성되고 추적되는 것처럼 보입니다. 그렇지 않으면 새로운 열에 대한 기본값으로 사용할 것을 어떻게 알 수 있습니까? – gzak

+0

@gzak -'SELECT CAST (@ DBTS AS bigint)'는이 전역 데이터베이스 카운터의 현재 값을 제공합니다. 새로운'rowversion' 컬럼을 추가하면 거기에서 증가하는 값을 채울 것입니다. –