[SQL] SQL은 - 행을 삽입 및 기본 키를 반환
SQLSQL은 - 행을 삽입 및 기본 키를 반환
좀 재치있는 문제가 있습니다. 말은 I 기본 키가 존재하는 테이블의 일부 데이터 열을 삽입 하였다. 한 사람이 어떻게 행 하나의 기본 키 방금 삽입 "을 선택"까요?
해결법
-
==============================
1.MS SQL Server의 경우 :
MS SQL Server의 경우 :
SCOPE_IDENTITY ()는 현재 범위 내에서 당신에게 마지막으로 생성 된 ID 값을 반환합니다 :
SELECT SCOPE_IDENTITY() AS NewID
-
==============================
2.에 관계없이 기본 키가 입력 한 내용의 SQL Server 2005 및 최대, 그리고 들어, 당신은 항상 삽입 된 값을 반환 OUTPUT 절을 사용할 수 있습니다 :
에 관계없이 기본 키가 입력 한 내용의 SQL Server 2005 및 최대, 그리고 들어, 당신은 항상 삽입 된 값을 반환 OUTPUT 절을 사용할 수 있습니다 :
INSERT INTO dbo.YourTable(col1, col2, ...., colN) OUTPUT Inserted.PrimaryKey VALUES(val1, val2, ....., valN)
-
==============================
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.SQL 서버 :
SQL 서버 :
당신은 @@ IDENTITY를 사용할 수 있습니다. INSERT 문 후 실행할 수 있습니다 :
select @@identity
이렇게하면 방금 삽입 한 레코드의 기본 키를 제공 할 것입니다. 나중에 사용할 계획이라면, 나는 그것을 저장하는 것이 좋습니다 :
set @MyIdentity = @@identity
저장 프로 시저에서 이것을 사용하고 응용 프로그램에 다시 액세스하려는 경우, NOCOUNT 오프를 가지고 있는지 확인하십시오.
-
==============================
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.PostgreSQL을 위해 :
PostgreSQL을 위해 :
SELECT CURRVAL(pg_get_serial_sequence('schema.table','id'))
출처 : https://stackoverflow.com/questions/2944297/postgresql-function-for-last-inserted-id
-
==============================
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.
select MAX(id_column) from table
즉, 이론적으로, 당신이 마지막으로 삽입 된 ID를 반환해야합니다. 그것은 많은 삽입이 방금 한 일하지만 서로를 얻을 수 있습니다 거기에가는 바쁜 데이터베이스의 경우.
어쨌든, 다른 방법에 대한 대안.
from https://stackoverflow.com/questions/8479315/sql-inserting-a-row-and-returning-primary-key by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] SQL 방법은 하나의 공백으로 반복 공백을 대체 (0) | 2020.05.26 |
---|---|
[SQL] 어떻게 CASCADE DELETE를 가능하게하기 위해 테이블을 수정합니까? (0) | 2020.05.26 |
[SQL] ExecuteNonQuery는에 영향을받는 행을 얻기 (0) | 2020.05.26 |
[SQL] 네트워크 어댑터가 연결을 설정할 수 없습니다 - 오라클 11g를 (0) | 2020.05.26 |
[SQL] BigQuery에서 구십일에게 활성 사용자 롤링,의 preformance을 개선 (DAU / MAU / WAU) (0) | 2020.05.26 |