Identity scope sql: SCOPE_IDENTITY (Transact-SQL) — SQL Server

Различия между SCOPE IDENTITY, IDENT CURRENT и IDENTITY в SQL Server

Введение

В этой статье мы узнаем о различиях между SCOPE IDENTITY, IDENT CURRENT и IDENTITY в SQL Server.

Что такое SCOPE_IDENTITY в SQL Server?

SCOPE_IDENTITY

  1. SCOPE_IDENTITY возвращает последнее значение IDENTITY, вставленное в столбец IDENTITY в той же области.
  2. SCOPE_IDENTITY возвращает последнее значение идентификатора, сгенерированное для любой таблицы в текущем сеансе и области.
  3. Область действия — это модуль, хранимая процедура, триггер, функция или пакет.
  4. Таким образом, два оператора находятся в одной области, если они находятся в одной и той же хранимой процедуре, функции или пакете.
  5. Функция SCOPE_IDENTITY() вернет значение NULL, если функция вызывается до того, как в области появятся какие-либо операторы вставки в столбец идентификаторов.

Что такое IDENT_CURRENT в SQL Server?

IDENT_CURRENT

  1. IDENT_CURRENT возвращает последнее значение идентификатора, сгенерированное для конкретной таблицы в любом сеансе и любой области.
  2. IDENT_CURRENT не ограничивается областью действия и сеансом, а ограничивается указанной таблицей.

Что такое @@IDENTITY в SQL Server?

@@IDENTITY

  1. @@IDENTITY возвращает последнее значение идентификатора, созданное для любой таблицы в текущем сеансе во всех областях.
  2. После завершения оператора INSERT, SELECT INTO или массового копирования @@IDENTITY содержит последнее значение идентификатора, созданное оператором.
  3. Если оператор не затронул ни одну таблицу со столбцами идентификаторов, @@IDENTITY возвращает NULL.
  4. Если вставлено несколько строк, генерирующих несколько значений идентификатора, @@IDENTITY возвращает последнее сгенерированное значение идентификатора.
  5. Значение @@IDENTITY не возвращается к предыдущему значению в случае сбоя оператора INSERT или SELECT INTO или массового копирования или отката транзакции.

Различия между SCOPE IDENTITY, IDENT CURRENT и IDENTITY 

  1. SCOPE_IDENTITY, IDENT_CURRENT и @@IDENTITY — похожие функции в том смысле, что они возвращают значения, вставленные в столбцы IDENTITY.

  2. SCOPE_IDENTITY и @@IDENTITY вернут последние значения идентификаторов, сгенерированные в любой таблице в текущем сеансе. Однако SCOPE_IDENTITY возвращает значения, вставленные только в пределах текущей области; @@IDENTITY не ограничивается определенной областью. Область действия — это модуль, хранимая процедура, триггер, функция или пакет.

Шаг 1. Создайте две таблицы, как показано ниже.

 CREATE TABLE Table1(id int IDENTITY)
CREATE TABLE Table2 (id int IDENTITY (100,1)) 

Шаг 2. Создайте триггер для таблицы1, как показано ниже.

 CREATE TRIGGER TG_Table1 ON Table1 FOR INSERT
КАК
НАЧИНАТЬ
ВСТАВИТЬ таблицу2 ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ
КОНЕЦ 

Шаг 3. Сделать оператор выбора обеих таблиц.

 SELECT * FROM Table1 

 SELECT * FROM Table2 

Шаг 4. Запустите следующие операторы SQL и посмотрите на результат.

 ВСТАВИТЬ Таблицу 1 ЗНАЧЕНИЯ ПО УМОЛЧАНИЮ
ВЫБЕРИТЕ @@IDENTITY
-- Он будет рассматривать значение идентификатора, измененное триггером, поскольку триггер является другой областью действия.
ВЫБЕРИТЕ SCOPE_IDENTITY()
-- Он НЕ будет учитывать значение идентификатора, измененное триггером, поскольку триггер является другой областью действия. 

Шаг 5. Выполните следующие операторы SQL для ident_current.

 ВЫБЕРИТЕ IDENT_CURRENT('Таблица1')
SELECT IDENT_CURRENT('Table2') 

Шаг 6. Запустите следующие операторы SQL в другом окне запроса, другими словами, в другом сеансе.

 ВЫБЕРИТЕ @@IDENTITY
ВЫБЕРИТЕ SCOPE_IDENTITY()
ВЫБЕРИТЕ IDENT_CURRENT('Таблица1')
SELECT IDENT_CURRENT('Table2') 

Заключение

В этой статье мы узнали о различиях между SCOPE IDENTITY, IDENT CURRENT и IDENTITY в SQL Server.

Различия и сходства между scope_identity, @@identity и ident_current — учитесь и развивайтесь с популярным сообществом электронного обучения

Ответил
Рахит Гупта

Ниже приведены определения этих функций:

scope_identity

1. Это возвращает идентификатор последней идентификационной строки, которая вставляется в любую таблицу в текущей области (например, сеанс/функция/триггеры/процедура/пакет)

2.. Если перед этим оператором не выполняется оператор вставки, имеющий столбец идентификаторов в текущем сеансе, будет возвращено нулевое значение.

Ident_current

1. Это вернет последний идентификационный номер, относящийся к таблице, который может быть в любом запросе

2. Это принимает имя таблицы в качестве параметра, поэтому оно зависит только от таблицы.

@@identity

1. Это вернет последний идентификационный номер конкретного сеанса любой таблицы, которая вставлена ​​последней.

2. В случае отката/сбоя транзакции будет возвращено последнее значение, которое было вставлено до разрыва транзакции.

Отличия следующие:

1.