마지막으로 삽입된 행 ID 가져오기(SQL 문 포함)
테이블에 새 레코드를 삽입할 때 새로 만든 ID를 받고 싶습니다.
http://msdn.microsoft.com/en-us/library/ms177564.aspx을 읽었는데 임시 테이블을 생성해야 합니다.
INSERT 문을 실행한 후 ID를 반환하고 싶습니다(INSERT를 1개만 실행한다고 가정).
예:
1 Joe Joe
2 Michael Mike
3 Zoe Zoe
INSERT 문을 실행할 때 생성된 ID를 반환하고 싶습니다(즉, 4).
SQL 문을 사용하여 어떻게 하는지 알려주실 수 있나요? 그렇지 않으면 불가능합니다.
SQL Server 테이블에 유형의 열이 있는 경우INT IDENTITY
(또는BIGINT IDENTITY
)는, 다음의 방법으로 최신의 삽입치를 취득할 수 있습니다.
INSERT INTO dbo.YourTable(columns....)
VALUES(..........)
SELECT SCOPE_IDENTITY()
이 기능은 다른 행을 삽입하지 않은 한 작동합니다.마지막 행을 반환할 뿐입니다.IDENTITY
여기서 이 범위에서 분배되는 값입니다.
적어도 두 가지 옵션이 더 있습니다.@@IDENTITY
그리고.IDENT_CURRENT
- Pinal Dave가 쓴 이 훌륭한 블로그 투고에서 이들 제품의 작동 방식과 차이점에 대해 자세히 읽어보십시오(또한 예상치 못한 결과를 얻을 수도 있습니다.
간단한 표로 가정하면:
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;
이 방법의 장점은 (a) 여러 줄의 삽입물을 처리한다는 것입니다.SCOPE_IDENTITY()
마지막 값만 반환) 및 (b) 잘못된 결과를 초래할 수 있는 이 병렬 버그를 회피합니다.단, 지금까지는 SQL Server 2008 R2 SP1 CU5에서만 수정되었습니다.
다음을 사용할 수 있습니다.
SELECT IDENT_CURRENT('tablename')
permicular 테이블의 최신 ID 에 액세스 합니다.
예: 다음 코드를 고려:
INSERT INTO dbo.MyTable(columns....) VALUES(..........)
INSERT INTO dbo.YourTable(columns....) VALUES(..........)
SELECT IDENT_CURRENT('MyTable')
SELECT IDENT_CURRENT('YourTable')
이는 대응하는 테이블에 대한 정확한 값을 산출할 수 있습니다.
마지막이 반환됩니다.IDENTITY
값을 생성한 연결 및 값을 생성한 문의 범위에 관계없이 테이블에서 생성된 값.
IDENT_CURRENT
는 범위 및 세션에 의해 제한되지 않고 지정된 테이블로 제한됩니다. IDENT_CURRENT
세션 및 스코프의 특정 테이블에 대해 생성된ID 값을 반환합니다.
언급URL : https://stackoverflow.com/questions/9477502/get-the-last-inserted-row-id-with-sql-statement
'itsource' 카테고리의 다른 글
SQL-Server:백업 세트는 기존 데이터베이스 이외의 백업을 보유하고 있습니다. (0) | 2023.04.07 |
---|---|
Lookup()과 Dictionary(Of list)의 차이점 (0) | 2023.04.07 |
일반적으로 String Comparison을 사용하는 것이 가장 좋습니다.Ordinal Ignore Case 또는 String Comparison.Universent Culture Ignore Case? (0) | 2023.04.07 |
Count()에서 조건을 지정할 수 있습니까? (0) | 2023.04.07 |
SQL Server 2008 Express에서 동일한 서버에 SQL Server 데이터베이스를 복제하려면 어떻게 해야 합니까? (0) | 2023.04.07 |