2
고유 한 숫자 키 생성에 사용되는 테이블이 있습니다. 이 키는 다른 테이블의 PrimaryKey로 사용됩니다. 테이블 구조는 다음과 같이이다 :SQL Server가 UPDATE 트랜잭션을 처리하는 방법은 무엇입니까?
TableName VARCHAR
CurrentKey INT
그래서 우리가
TableName Customers
CurrentKey 400
처럼이 테이블에 데이터가 그래서 우리는 테이블
Customers
의 향후 기본 키를 필요로 할 때 우리가
TableName
가
Customers
입니다이 테이블에서
CurrentKey
얻을, 그것은 우리에게 400 증가 (400 + 1) 그것을 줄 것이고 우리는 또한이 키를 테이블에서 업데이트 할 것입니다. 그래서 우리
CurrentKey
는 지금 401입니다.
우리는이 목적을 위해 사용하는 SQL은 다음과 같습니다
SQL1 :
DECLARE @CurrentKey INT
UPDATE myTable
SET @CurrentKey = CurrentKey = CurrentKey + 1
WHERE TableName = @TableName
내 질문은 우리가 테이블을 잠글 필요합니까 여러 사용자가 호출하는 경우 키가 중복되지 않도록이다 이 동시에? 나는 SQL 서버는 중복 데이터를 허용하지 않습니다 확신하지만 난 ... 테이블 잠금으로 쿼리 방법을 모른다 : SQL 서버가 UPDATE
을 처리하는 방법을
SQL2
BEGIN TRANSACTION
DECLARE @CurrentKey INT
UPDATE myTable WITH (TABLOCKX)
SET @CurrentKey = CurrentKey = CurrentKey + 1
WHERE TableName = @TableName
END TRANSACTION
누군가가 설명해 주시겠습니까 전화?
'INT IDENTITY' 열 유형을 사용하여 연속적인 숫자를 처리하려면 SQL Server에 그대로 두어야합니다. **이 일을 독자적으로 시도하지 마라! ** 실패 할 수있는 많은 방법이 너무 많다 .... –
감히 나는'IDENTITY' 열을 다시 발명하려는 이유를 묻는다. 또한 왜 현재 값의 테이블을 중앙 집중식으로 유지 하시겠습니까? 시간 낭비, 아마도 틀렸고 테이블을 직접 쿼리하는 것보다 덜 정확합니다. – Bridge
데이터베이스가 12 살 이상이며 이전 논리를 변경할 수 없습니다! –