2014-03-26 5 views
0

이 MSSQL의 자동 증가 기능과 관련되는 다른 컬럼에 저장하고 난 테이블이 여기에서MSSQL - 나는 자동차를 삽입해야하는 상황이 자동 증가 열 값을 가져오고

CREATE TABLE Order(
[order_id] [int] IDENTITY(1,1) NOT NULL, 
[name] [varchar](50) NULL, 
[original_order_id] [int] NOT NULL 
) 

을 만든 다음 한 original_id에 대한 original_order_id의 값을 생성했습니다.

일을 다음 몇 분 인터넷 검색 후

와 나는 첩을 실행하는 자바 응용 프로그램 스프링 JDBC 템플릿을 사용하고

insert into Order values('Vegitable Order', IDENT_CURRENT('Order')) 

나를 위해 잘 작동합니다. 어떤 문제가있을 수 있습니까? 특히 멀티 스레드 환경에서?

+0

가능한 중복 [? JDBC에서 삽입 ID를 얻는 방법] (http://stackoverflow.com/questions/1915166/how-to-get-the-insert-id- in-jdbc) –

답변

1

IDENT_CURRENT을 사용하는 것은 좋지 않습니다. 동시 트랜잭션이있는 경우 마지막 삽입 된 ID가 아닌 트랜잭션의 마지막 삽입 된 ID가 반환 될 수 있습니다.

INSERT의 생성 된 ID를 검색하고 상기 제 INSERT에서 검색된 값을 사용하거나, 상기 제 INSERTSCOPE_IDENTITY()을 사용할 JDBC getGeneratedKey 기능을 사용한다. SCOPE_IDENTITY()을 사용하여 동일한 트랜잭션에서 두 명령문을 모두 실행해야합니다.

은 참조 : How to get the insert ID in JDBC?

+0

Hello Mark, 답변 해 주셔서 대단히 감사합니다. 여기에는 2 개의 삽입이 없기 때문에 여기서는 getGeneratedKey를 사용할 수 없습니다. 이 자동 생성 된 값을 같은 테이블의 다른 열에 저장하고 싶습니다. getGeneratedKeys를 사용하는 경우 해당 열을 업데이트하기 위해 동일한 테이블에서 별도의 업데이트를 수행해야합니다. 제 생각을 알려주세요. – keth

+0

@keth 나는 그것을 어떻게 든 놓쳤다. 같은 테이블의 다른 열에 ID 열을 저장하려는 이유는 무엇입니까? 그것은 불필요한 정보 복제입니다. 단순히 식별 컬럼의 변경을 허용하지 마십시오. –