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

Използвайте @@IDENTITY, за да върнете последно въведената стойност на самоличността в SQL Server

В SQL Server можете да използвате T-SQL @@IDENTITY системна функция за връщане на последно въведената стойност на идентичност в текущата сесия.

Обърнете внимание, че връща последната стойност на идентичност, генерирана в всяко таблицав текущата сесия . Това е в контраст с IDENT_CURRENT() функция, която връща последно въведената стойност на идентичност за дадена таблица .

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

Пример 1

Ето основен пример за код за @@IDENTITY употреба.

ИЗБЕРЕТЕ @@IDENTITY КАТО [последно въведена стойност на самоличността];

Резултат:

+--------------------------------+| Последно въведена стойност на самоличността ||--------------------------------|| NULL |+--------------------------------+

Причината това връща NULL е защото отворих нова сесия към SQL Server и все още не съм актуализирал колона за идентичност по време на текущата си сесия.

По-долу е даден код, който извършва някои актуализации на колони за идентичност.

CREATE TABLE Cats(id int IDENTITY);CREATE TABLE Dogs(id int IDENTITY);INSERT Cats DEFAULT VALUES;INSERT Cats DEFAULT STORY;ИЗБЕРЕТЕ @@IDENTITY КАТО [Последно въведена стойност на самоличността];

Резултат:

+--------------------------------+| Последно въведена стойност на самоличността ||--------------------------------|| 2 |+--------------------------------+

Тук създавам няколко таблици, вмъквам някои данни, след което избирам текущата стойност на идентичността.

Текущата стойност на идентичността е 2, защото вмъкнах два реда в тази таблица.

Сега нека вмъкнем един ред в другата таблица:

ВЪВЕТЕ СТОЙНОСТИ ПО ПОДРАЗБИРАНЕ за кучета; ИЗБЕРЕТЕ @@IDENTITY КАТО [Последно въведена стойност на самоличността];

Резултат:

+--------------------------------+| Последно въведена стойност на самоличността ||--------------------------------|| 1 |+--------------------------------+

Върнатата стойност е 1, защото това е последната въведена стойност на самоличността за тази сесия.

Пример 2 – В сравнение с IDENT_CURRENT()

Тук се сравнява с IDENT_CURRENT() .

ИЗБЕРЕТЕ @@IDENTITY КАТО [@@IDENTITY], IDENT_CURRENT('Котки') КАТО [IDENT_CURRENT('Котки')], IDENT_CURRENT('Кучета') КАТО [IDENT_CURRENT('Кучета')];

Резултат:

+--------------+------------------------------+----- --------------------+| @@IDENTITY | IDENT_CURRENT('Котки') | IDENT_CURRENT('Кучета') ||--------------+-------------------------+- ------------------------|| 1 | 2 | 1 |+--------------+------------------------------+------ -------------------+

Както бе споменато, IDENT_CURRENT() връща резултата си въз основа на посочената таблица. Следователно можем да го използваме, за да намерим последните стойности на идентичност за всяка таблица.

Пример 3 – Превключване към нова сесия

Сега, ако отворя нова връзка и избера @@IDENTITY отново, това се случва:

ИЗПОЛЗВАЙТЕ тест;ИЗБЕРЕТЕ @@IDENTITY КАТО [@@IDENTITY], IDENT_CURRENT('Котки') КАТО [IDENT_CURRENT('Котки')], IDENT_CURRENT('Кучета') КАТО [IDENT_CURRENT('Кучета')]; 

Резултат:

+--------------+------------------------------+----- --------------------+| @@IDENTITY | IDENT_CURRENT('Котки') | IDENT_CURRENT('Кучета') ||--------------+-------------------------+- ------------------------|| NULL | 2 | 1 |+--------------+------------------------------+------ -------------------+

@@IDENTITY резултатът е NULL, защото не съм вмъкнал нищо в колона за идентичност в новата сесия.

IDENT_CURRENT() резултатите не са NULL, защото резултатът му се основава на таблицата, а не на сесията.

@@IDENTITY срещу SCOPE_IDENTITY() срещу IDENT_CURRENT()

Вижте IDENT_CURRENT срещу @@IDENTITY срещу SCOPE_IDENTITY в SQL Server:Каква е разликата? за прост пример, който разглежда разликите между тези три функции.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Какво означава =*?

  2. Каква е целта на използването на OPTION(MAXDOP 1) в SQL Server?

  3. Как да импортирате база данни на SQL Server в Access 2016

  4. Прегледайте настройките на вашата сесия с SESSIONPROPERTY() в SQL Server

  5. Преглеждайте историята на заданията на агент на SQL Server с Azure Data Studio