2011-04-26 62 views
13

SET IDENTITY_INSERT xyz ON의 범위는 무엇입니까?SET IDENTITY_INSERT xyz ON의 범위는 무엇입니까?

특정 테이블에 대해 하나의 저장 프로 시저에서이 코드를 사용하면 다른 사용자가 다른 프로 시저를 실행하여 동시에 해당 특정 테이블에 삽입하면 어떻게됩니까?

또한 서로 다른 사용자/절차가 서로 다른 테이블에 대해 SET IDENTITY_INSERT xyz ON 을 동시에 설정하려고하면 어떻게됩니까?

+0

나는 상관없이이 일을하는 것을 매우 조심해야합니다. Set_identity 삽입은 드문 경우에만 수행되어야하며, 일반적으로 시스템을 처음 초기화 할 때만 ID를 보유해야하는 다른 시스템에서 데이터를 가져 오는 경우가 종종 있습니다. 응용 프로그램에서 이것을 사용하는 것은 매우 좋지 않습니다. 두 사용자가 differnt 레코드에 대해 동일한 값을 삽입하려는 경우 어떻게됩니까? 아이덴티티가 자동 생성되고 이러한 방식으로 유지되어야하거나 사용자가 사용하지 않아야하는 이유가 있습니다. – HLGEM

+1

@HLGEM,이 데이터는 삭제 된 데이터가 다시 추가되는 (기록 로그 테이블에서 복사 됨) 복원 기능의 일부입니다. – RacerX

답변

11

테이블은 한 번에 하나의 테이블에 대해서만 옵션을 가질 수 있지만 동일한 테이블에 대해 여러 개의 다른 세션이있을 수 있습니다 (확실하지는 않습니다.)

자식 배치가 완료되면 (이 옵션이 설정 됨) 자동으로 연결이 해제되는 것처럼 보입니다.

CREATE TABLE Tst 
(C INT IDENTITY(1,1)) 

EXEC('SET IDENTITY_INSERT Tst ON') 
INSERT INTO Tst(C) VALUES (1) /*Fails - Complains IDENTITY_INSERT is off*/ 

SET IDENTITY_INSERT Tst ON 
EXEC('INSERT INTO Tst(C) VALUES (1)') /*Succeeds this way round*/ 
SET IDENTITY_INSERT Tst OFF 
+0

은 세션 = 연결을 수행합니까? – RacerX

+0

@RacerX - 네,하지만 호출 스택을 올라갈 때 재설정되는 것에 대한 제 의견을 참조하십시오. –

3

내 시험 (SQL 2008 R2) 테이블이 다른 세션에서 IDENTITY_INSERT ON 경우에도 열에 신원 사양은 여전히 ​​하나 개의 세션에서 올바른 값을 손을 보여줍니다.

한 세션 (특정 세션에서)에 특정 ID 열 값을 사용하여 데이터를 대량 삽입 할 수 있어야하며 다른 사용자 (다른 세션에서)는 정상적으로 작동하는 ID 열에 의존해야합니다.

관련 문제