티스토리 뷰

반응형

[문제가 발생 하는 경우]

MSSQL 에서 Table 의 자동 증가행 필드를 읽어 올 경우 가끔 잘 못 된 값이 리턴 되는것을 경험

 

자동증가행 읽어 오는 구분

테이블 구조

TB_TEST (auto_no int identity(1,1) , column1 int)

declare @auto_No int
Insert InTo TB_TEST(column1) Values(12) 
  Set @auto_No   = @@IDENTITY

 

@@IDENTITY는 현재 세션의 마지막 IDENTITY 값을 반환하므로, 트리거 등에 의해 다른 테이블에 INSERT가 발생하면 그 값이 반환될 수 있습니다.

 

[ 해결 방법 ]

1번째 해결방법

DECLARE @OutputTable TABLE (auto_No INT)
Declare @auto_No int

Insert InTo TB_TEST(column1) 
OUTPUT INSERTED.Slip_No INTO @OutputTable
Values(12) 
  
SELECT @auto_No = Slip_No FROM @OutputTable

OUTPUT 절을 사용하면 INSERT된 행의 실제 값을 직접 가져올 수 있습니다.

 

2번째 해결방법

declare @auto_No int
Insert InTo TB_TEST(column1) Values(12) 
Set @auto_No = SCOPE_IDENTITY()

SCOPE_IDENTITY()는 현재 스코프(현재 저장 프로시저나 함수)에서 생성된 마지막 IDENTITY 값을 반환합니다.

 

 

반응형

'IT Story > DB' 카테고리의 다른 글

MSSQL 분할 백업  (0) 2024.03.04
왜 MSSQL을 사용하는가?  (0) 2024.01.30
MSSQL이란 무엇인가?  (0) 2024.01.29
MSSQL에 대한 소개  (0) 2023.11.21
MSSQL 강의 목차  (0) 2023.11.17
댓글