내에서 고정 I가 다음 TRANSACTION 구조 : 나는 아무도이 거래 내의 모든 진술하지 않는 이상이다 local_table_1
의 내용을 읽을 수 없습니다 있는지 확인하려면TSQL 2012 - 테이블 TRANSACTION
BEGIN TRY
BEGIN tran sometransaction
INSERT INTO local_table_1 (columns...)
SELECT (columns...)
FROM remote_table
WHERE (conditions, predicates)
UPDATE local_table_1
SET column_A = value
WHERE....
UPDATE local_table_1
SET column_B = value
WHERE....
UPDATE local_table_1
SET column_C = value
WHERE....
COMMIT tran sometransaction
END TRY
BEGIN catch
ROLLBACK tran sometransaction
END catch
및 저 지르다.
전체 거래에서 WITH (TABLOCKX, HOLDLOCK)
을 설정하는 방법이 있습니까? 트랜잭션 실행 중에 테이블이 자동으로 잠기는 것을 이해하지만 외부 동시 읽기 프로세스로 확장되는 경우 설명을 찾을 수 없습니다.
감사합니다.
왜 전체 테이블을 잠글 필요가 있습니까? SQL Server는 전체 테이블을 단일 행으로 업데이트하는 것을 방지하기 위해 잠금 에스컬레이션을 내장했습니다. –
글쎄 ... 그게 전부 야, 나는 전체 트랜잭션의 지속 기간 동안 방지하려고하는 외부 읽기를 제외하고이 테이블에 대해 실행중인 다른 프로세스가 없다는 것을 알고있다. 트랜잭션은 다음과 같이 진행됩니다 : 10,000 개의 레코드를 로컬 테이블에 복사하고 모든 10,000 개의 레코드를 3x - 3 가지 다른 업데이트 문으로 업데이트하십시오.) 누군가가 해당 업데이트 문 사이에서 테이블을 읽으려고하면 업데이트되지 않은 데이터를 가져옵니다. – Milan
제 질문은 이러한 다른 프로세스가 테이블을 읽을 수없는 이유는 무엇입니까? NOLOCK을 사용하거나 UNCOMMITTED를 사용하지 않는 한이 프로세스는 커밋 될 때까지 변경 사항을 볼 수 없습니다. –