복붙노트

[SQL] SQL은 - 행을 삽입 및 기본 키를 반환

SQL

SQL은 - 행을 삽입 및 기본 키를 반환

좀 재치있는 문제가 있습니다. 말은 I 기본 키가 존재하는 테이블의 일부 데이터 열을 삽입 하였다. 한 사람이 어떻게 행 하나의 기본 키 방금 삽입 "을 선택"까요?

해결법

  1. ==============================

    1.MS SQL Server의 경우 :

    MS SQL Server의 경우 :

    SCOPE_IDENTITY ()는 현재 범위 내에서 당신에게 마지막으로 생성 된 ID 값을 반환합니다 :

    SELECT SCOPE_IDENTITY() AS NewID
    
  2. ==============================

    2.에 관계없이 기본 키가 입력 한 내용의 SQL Server 2005 및 최대, 그리고 들어, 당신은 항상 삽입 된 값을 반환 OUTPUT 절을 사용할 수 있습니다 :

    에 관계없이 기본 키가 입력 한 내용의 SQL Server 2005 및 최대, 그리고 들어, 당신은 항상 삽입 된 값을 반환 OUTPUT 절을 사용할 수 있습니다 :

    INSERT INTO dbo.YourTable(col1, col2, ...., colN)
    OUTPUT Inserted.PrimaryKey
    VALUES(val1, val2, ....., valN)
    
  3. ==============================

    3.MySQL을 들어, 사용 LAST_INSERT_ID ()

    MySQL을 들어, 사용 LAST_INSERT_ID ()

    http://dev.mysql.com/doc/refman/5.0/en/getting-unique-id.html

    또한, 트랜잭션을 시작하는 행을 삽입하고 그냥 타임 스탬프 또는 GUID와 같이 삽입하는 고유 값을 가지는 몇 가지 필드를 사용하여 행을 선택 할 수 있어야한다. 이것은 거의 모든 RDBMS에서 작동하도록 지원하는 거래 한 당신이 행을 선택하는 것이 유일한 필드가있다.

  4. ==============================

    4.SQL 서버 :

    SQL 서버 :

    당신은 @@ IDENTITY를 사용할 수 있습니다. INSERT 문 후 실행할 수 있습니다 :

    select @@identity
    

    이렇게하면 방금 삽입 한 레코드의 기본 키를 제공 할 것입니다. 나중에 사용할 계획이라면, 나는 그것을 저장하는 것이 좋습니다 :

    set @MyIdentity = @@identity
    

    저장 프로 시저에서 이것을 사용하고 응용 프로그램에 다시 액세스하려는 경우, NOCOUNT 오프를 가지고 있는지 확인하십시오.

  5. ==============================

    5.당신이 테이블에 트리거가있을 때 MS SQL의 새로운 인덱스를 검색해야하는 경우에 당신은 약간의 해결 방법을 사용해야합니다. 간단한 출력이 작동하지 않습니다. 당신은 (VB.NET에서) 이런 일을 할 필요가 :

    당신이 테이블에 트리거가있을 때 MS SQL의 새로운 인덱스를 검색해야하는 경우에 당신은 약간의 해결 방법을 사용해야합니다. 간단한 출력이 작동하지 않습니다. 당신은 (VB.NET에서) 이런 일을 할 필요가 :

    DECLARE @newKeyTbl TABLE (newKey INT);
    INSERT INTO myDbName(myFieldName) OUTPUT INSERTED.myKeyName INTO @newKeyTbl VALUES('myValue'); " & _
    SELECT newKey FROM @newKeyTbl;"
    

    .NET을 사용하는 경우,이 쿼리의 반환 값을 직접 정수 (당신이 수익을 얻기 위해 .NET하는 SqlCommand의 "ExecuteScalar는"을 호출해야)에 캐스트 할 수 있습니다.

  6. ==============================

    6.PostgreSQL을 위해 :

    PostgreSQL을 위해 :

    SELECT CURRVAL(pg_get_serial_sequence('schema.table','id'))
    

    출처 : https://stackoverflow.com/questions/2944297/postgresql-function-for-last-inserted-id

  7. ==============================

    7.SQLite는 경우 :

    SQLite는 경우 :

    SELECT [Column_1],  [Column_2],...  [Column_n]
    FROM [YourTable]
    WHERE rowid = (SELECT last_insert_rowid())
    

    이므로:

    기본 키 (INTEGER PRIMARY KEY로 정의 즉 하나의 열 PK)을 rowid로 한 바뀌 당신이 YourTable을 생성했다면 당신은 사용 :

    SELECT last_insert_rowid()
    

    이는 일반적인 경우입니다. 마지막으로,이 ROWID 테이블없이 작동하지 않습니다.

    확인해주십시오:

    https://www.sqlite.org/lang_corefunc.html#last_insert_rowid

  8. ==============================

    8.

    select MAX(id_column) from table
    

    즉, 이론적으로, 당신이 마지막으로 삽입 된 ID를 반환해야합니다. 그것은 많은 삽입이 방금 한 일하지만 서로를 얻을 수 있습니다 거기에가는 바쁜 데이터베이스의 경우.

    어쨌든, 다른 방법에 대한 대안.

  9. from https://stackoverflow.com/questions/8479315/sql-inserting-a-row-and-returning-primary-key by cc-by-sa and MIT license