[SQL] (SQL 문) 마지막으로 삽입 된 행의 ID를 가져옵니다 [중복]
SQL(SQL 문) 마지막으로 삽입 된 행의 ID를 가져옵니다 [중복]
난 당신이 테이블에 새 레코드를 삽입 할 때 새로운 생성 된 ID를 얻으려면.
나는이 읽기 : http://msdn.microsoft.com/en-us/library/ms177564.aspx하지만 임시 테이블을 만들 필요가있다.
나는 (하나의 INSERT를 실행하는 가정) INSERT 문을 실행 한 후 ID를 반환합니다.
예:
1 Joe Joe
2 Michael Mike
3 Zoe Zoe
INSERT 문을 실행할 때, 내가 생성 된 ID를 반환하려면, 4를 의미한다.
어떻게 사용하는 SQL 문을 수행하는 말해 또는 수 없습니다 수 있습니까?
해결법
-
==============================
1.당신의 SQL 서버 테이블 형 INT의 IDENTITY (또는 BIGINT IDENTITY)의 열이있는 경우에, 당신은 사용하여 최신 삽입 값을 얻을 수 있습니다 :
당신의 SQL 서버 테이블 형 INT의 IDENTITY (또는 BIGINT IDENTITY)의 열이있는 경우에, 당신은 사용하여 최신 삽입 값을 얻을 수 있습니다 :
INSERT INTO dbo.YourTable(columns....) VALUES(..........) SELECT SCOPE_IDENTITY()
다른 행을 삽입하지 않은 것처럼만큼이 작품 - 그냥 여기이 범위에 나눠 마지막 IDENTITY 값을 반환합니다.
@@ IDENTITY 및 IDENT_CURRENT - - 더가 작동하는 방법과 읽어 어떤 방법들이 여기 PINAL 데이브에 의해이 우수한 블로그 게시물에있어 다른 (당신에게 예상치 못한 결과를 얻을 수 있습니다) 두 개 이상의 더 많은 옵션이 있습니다.
-
==============================
2.간단한 테이블을 가정 :
간단한 테이블을 가정 :
CREATE TABLE dbo.foo(ID INT IDENTITY(1,1), name SYSNAME);
우리는 더 소비를위한 테이블 변수에 IDENTITY 값을 캡처 할 수 있습니다.
DECLARE @IDs TABLE(ID INT); -- minor change to INSERT statement; add an OUTPUT clause: INSERT dbo.foo(name) OUTPUT inserted.ID INTO @IDs(ID) SELECT N'Fred' UNION ALL SELECT N'Bob'; SELECT ID FROM @IDs;
이 방법의 장점은 그것이 잘못된 결과로 이어질 수있는이 병렬 버그를 피할 수 있지만, 지금까지 단에서 해결 다중 행 삽입 (SCOPE_IDENTITY ()는 마지막 값 반환)와 (b)를 처리 (a)는 SQL 서버 2008 R2 SP1 CU5.
-
==============================
3.당신이 사용할 수있는:
당신이 사용할 수있는:
SELECT IDENT_CURRENT('tablename')
특정 테이블에 대한 최신의 정체성에 액세스 할 수 있습니다.
예를 들면 다음 코드를 고려 :
INSERT INTO dbo.MyTable(columns....) VALUES(..........) INSERT INTO dbo.YourTable(columns....) VALUES(..........) SELECT IDENT_CURRENT('MyTable') SELECT IDENT_CURRENT('YourTable')
이것은 해당 테이블에 대한 올바른 값으로 산출한다.
그것은 관계없이 값을 만든 연결의 테이블에서 생성 된 마지막 ID 값을 반환에 관계없이 값을 생성 한 Statement의 범위.
IDENT_CURRENT는 세션 범위에 의해 제한되지 않는다; 그것은 지정된 테이블로 제한됩니다. IDENT_CURRENT는 임의의 세션과 범위에있는 특정 테이블에 대해 생성 된 ID 값을 반환합니다.
from https://stackoverflow.com/questions/9477502/get-the-last-inserted-row-id-with-sql-statement by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] 어떻게 여러 행이 저장 프로 시저를 생성하지 않고 오라클의 하나로 연결될 수있다? [복제] (0) | 2020.04.01 |
---|---|
[SQL] 덮여 지수는 무엇입니까? (0) | 2020.04.01 |
[SQL] 밀리 초 단위로 오라클이 타임 스탬프의 차이를 계산 (0) | 2020.04.01 |
[SQL] 행이 최대 날짜가 테이블에서 선택 정보 (0) | 2020.04.01 |
[SQL] 연속 행 사이의 날짜 차이 (0) | 2020.04.01 |