Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

вземете нов идентификатор на SQL запис

SELECT SCOPE_IDENTITY() 

използването на @@IDENTITY може да има неочаквани резултати, така че внимавайте как използвате този. Тригерите, които вмъкват записи в други таблици, ще доведат до промяна на стойността @@IDENTITY - където SCOPE_IDENTITY() ще ви даде последната самоличност само от текущия ви обхват.

Ето примерна извадка, която ще покаже разликата между @@IDENTITY и SCOPE_INSERT() и как те могат да връщат различни стойности..

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

Друг вариант, който никой не е обсъждал тук, е да използвате клаузата OUTPUT, която е в SQL 2005. В този случай просто трябва да добавите изходната клауза към вашето вмъкване и след това да хванете този набор от записи от вашия код. Това работи добре при вмъкване на множество записи вместо само 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. Връщане на броя на редовете, засегнати от операторите UPDATE

  2. Регулярни изрази в сървърите на SQL Server?

  3. Мога ли да задам схема по подразбиране за в рамките на съхранена процедура?

  4. Как да премахнете пощенски акаунт в база данни от профил в SQL Server (T-SQL)

  5. Завършва ли използването на отворена SQL връзка