복붙노트

[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. ==============================

    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. ==============================

    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. ==============================

    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 값을 반환합니다.

  4. from https://stackoverflow.com/questions/9477502/get-the-last-inserted-row-id-with-sql-statement by cc-by-sa and MIT license