기본 키가 자동 증가로 설정되어 있습니다.테이블에 삽입하고 기본 키 값을 가져 오는 방법은 무엇입니까?
여러 쿼리를 수행 중이고 다른 테이블 (IsIdentity = TRUE
)의 외래 키로 사용할 기본 키 값을 검색해야합니다.
삽입 쿼리를 수행 할 때 기본 키 값을 다시 가져 오는 우아한 방법이 있습니까? 지금 당장 나는 재귀 적으로 보이고 그 열에서 가장 높은 가치를 얻고있다.
제안 사항?
기본 키가 자동 증가로 설정되어 있습니다.테이블에 삽입하고 기본 키 값을 가져 오는 방법은 무엇입니까?
여러 쿼리를 수행 중이고 다른 테이블 (IsIdentity = TRUE
)의 외래 키로 사용할 기본 키 값을 검색해야합니다.
삽입 쿼리를 수행 할 때 기본 키 값을 다시 가져 오는 우아한 방법이 있습니까? 지금 당장 나는 재귀 적으로 보이고 그 열에서 가장 높은 가치를 얻고있다.
제안 사항?
insert into YourTable values (...)
SCOPE_IDENTITY와 새로운 PK()
select scope_identity()
거룩한 쓰레기를 얻을!
단지 SCOPE_IDENTITY()
함수를 호출 :
insert into your_talble(col1,col2) values('blah','more blah')
select scope_identity()
다른 문을 삽입 할 경우 가장 높은 값을 선택하면 오류가 반환됩니다 때문이다. 함수 scope_identity()
은 현재 상황 (즉 성명서)에 작성된 ID를 반환합니다.
SCOPE_IDENTITY()는 아마도 원하는 것일 수 있습니다. 이 코드는 실행되는 동일한 코드 컨텍스트에 의해 삽입 된 마지막 레코드의 ID를 반환합니다.
IDENT_CURRENT ('tablename')은 동시성 문제가 발생할 수 있습니다. 즉, 다른 레코드가 INSERT와 IDENT_CURRENT 호출 사이에 삽입되지 않는다는 보장은 없습니다.
나는 VillageIdiot의 폭발이 의미하는 놀라움의 원천에 대해 확신 할 수 없다.하지만 나는이 질문이 전혀 중복되지 않는 것으로 아주 놀랐다.
을 사용하면 dup로 플래그가 지정되지 않아서 기쁩니다. 먼저 찾았습니다 !! – htm11h
SQL Server 2005 이상을 사용하는 경우 OUTPUT 절을 사용할 수 있습니다.
create table T(
pk int identity primary key,
dat varchar(20)
);
go
insert into T
output inserted.pk
values ('new item');
go
drop table T;
출력을 클라이언트뿐만 아니라 테이블로 보낼 수 있습니다. 예 :
create table T(
pk int identity primary key,
dat varchar(20)
);
create table U(
i int identity(1001,1) primary key,
T_pk int not null,
d datetime
);
go
insert into T
output inserted.pk, getdate()
into U(T_pk,d)
values ('new item'), ('newer item');
go
select * from T;
select * from U;
go
drop table T, U;
SQL Server 2008부터는 더 많은 가능성을 위해 "복합 DML"을 사용할 수 있습니다.
scope_identity()를 사용해야합니다. 그리고 insert 문과 scope_identity()를 트랜잭션으로 래핑하는 것이 좋습니다.
INSERT INTO YourTable (1, 2, etc.)
OUTPUT inserted.yourIDcolumn
VALUES (value1, value2, value...)
참고 :이 MS SQL 2005을위한 더 큰
한 응은) (SCOPE_IDENTITY를 사용하여 갈 수있는 가장 신뢰할 수 있고 효율적인 방법입니다! –
더 이상 좋은 방법은 없습니다. – HLGEM
@HLGEM 그 다음은 무엇입니까? – paz