В 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:Каква е разликата? за прост пример, който разглежда разликите между тези три функции.