Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

uzyskaj nowy identyfikator rekordu SQL

SELECT SCOPE_IDENTITY() 

używanie @@IDENTITY może przynieść nieoczekiwane rezultaty, więc uważaj, jak używasz tego. Wyzwalacze, które wstawiają rekordy do innych tabel, spowodują zmianę wartości @@IDENTITY — gdzie SCOPE_IDENTITY() da ci ostatnią tożsamość tylko z bieżącego zakresu.

Oto przykład, który pokaże różnicę między @@IDENTITY i SCOPE_INSERT() oraz sposób, w jaki mogą one zwracać różne wartości.

use tempdb
go
create table table1
    (ID int identity)
go
create table table2
    (ID int identity(100, 1))
go
create trigger temptrig 
    on table1 
    for insert
as
begin

    insert  table2 
     default values;

end
go
insert  table1 
default values;
select  SCOPE_IDENTITY(), 
        @@IDENTITY

Inną opcją, o której nikt tutaj nie dyskutował, jest użycie klauzuli OUTPUT, która jest w SQL 2005. W takim przypadku wystarczy dodać klauzulę output do swojego inserta, a następnie przechwycić ten zestaw rekordów z kodu. Działa to dobrze podczas wstawiania wielu rekordów zamiast tylko 1...

use tempdb
go
create table table1
    (ID int identity)
go
insert   table1 
output   inserted.ID
default values;
--OR...
insert   table1 
output   inserted.$identity
default values;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 sposoby na uzyskanie listy harmonogramów w programie SQL Server Agent (T-SQL)

  2. Egzamin dotyczący administrowania bazą danych Azure SQL Database (DP-300)

  3. Automatyczne zbieranie danych o zakończonych zadaniach w MS SQL Server

  4. Konwertuj nazwę miesiąca na numer miesiąca w programie SQL Server (T-SQL)

  5. Czy każda tabela użytkowników powinna mieć indeks klastrowy?