itsource

마지막으로 삽입된 행 ID 가져오기(SQL 문 포함)

mycopycode 2023. 4. 7. 21:16
반응형

마지막으로 삽입된 행 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

반응형