2010-12-05 4 views
5

내 테이블에 열이 있습니다 (예 : updateStamp). 행 업데이트시 새로운 순차 번호로 해당 필드를 업데이트하는 방법을 찾고 싶습니다.SQL Server - 업데이트시 고유 일련 번호를 생성하는 방법

데이터베이스에는 많은 트래픽이 있지만 주로 여러 개의 동시 업데이트가 일괄 적으로 발생할 수 있습니다. 따라서 솔루션은 최소한의 잠금을 유발해야합니다.

이 요구 사항에 대한 이유는 클라이언트가 테이블 전달을 반복하고 행이 업데이트되는 경우 솔루션을 가져야하기 때문입니다. 결과 집합에 다시 표시되어야합니다.

그래서 쿼리는 여러 업데이트가 동시에 일어날 수 있기 때문에

SELECT * 
FROM mytable 
WHERE updateStamp > @lastReturnedUpdateStamp 
ORDER BY updateStamp 

불행하게도 타임 스탬프 여기서 일하지 않는 것과 같다.

+0

무엇 버전의 SQL Server에 있습니까? SQL Server 2008의 경우 '변경 내용 추적'은 필요한 작업을 수행하고 '타임 스탬프'및 트랜잭션 커밋 시간과 관련된 미묘한 문제를 해결한다고 생각합니다. –

+0

2008 R2, 사용하고 있습니다. 제안에 감사드립니다! 나는 그런 특징을 알지 못했다. 이것은 나의 요구에 과잉이다. – user431529

답변

2

timestamp (더 이상 사용되지 않음) 또는 rowversion (현재) 데이터 유형이 행의 모든 ​​쓰기 작업에서 업데이트된다는 사실을 알고 있습니다.

시간 스탬프 자체가 아닙니다. 날짜, 시간, 초 등을 저장하지 않습니다. 실제로는 RowVersion (이름 변경)이 더 많습니다. 행에.

일반적으로 행을 읽은 시간과 업데이트 할 시간 사이의 수정 여부를 확인하는 데 사용됩니다.

실제로 날짜/시간 정보가 아니기 때문에 사람이 읽을 수있는 정보를 얻기 위해서는 다른 열을 사용해야 할 가능성이 큽니다. 테이블에 LastModified DATETIME 열을 추가하고 DEFAULT GETDATE() 제약 조건을 사용하면 삽입시 새 값을 삽입 할 수 있습니다. 업데이트를 유지하려면 업데이트가 발생할 때 LastModified 열을 업데이트하기 위해 AFTER UPDATE 트리거를 작성해야합니다.

여기에 귀하의 경우에 딱 맞는 것 서버 2011 (일명 "나다")는 우리에게 SEQUENCES를 가져올 것이다

SQL -하지만 슬프게도 공식 출시으로부터 '여전히 1 년 이상 .....

+0

내 케이스에 꼭 맞습니다. 테스트하고 잘 작동합니다! 그러나 이상하게도 SQL Server 관리 Studio는 제안 상자에 rowversion 데이터 형식을 제공하지 않습니다. 이제는 타임 스탬프를 사용해야합니다. – user431529

관련 문제