Подтвердить что ты не робот

Sql Server возвращает значение столбца идентификатора после инструкции insert

Возможно ли, чтобы сервер sql с помощью хранимой процедуры возвращал значение столбца идентификатора в таблице, в которую вставлены некоторые значения? Например, используя хранимую процедуру, если мы вставляем данные в таблицу:

Таблица TBL

  • Целое число пользователя, идентификатор, автоинкремент
  • Имя varchar
  • UserName varchar
  • Пароль varchar

Итак, если я запустил процедуру хранения, вставив некоторые значения, например:

 Insert into TBL (Name, UserName, Password)
 Values ('example', 'example', '$2a$12$00WFrz3dOfLaIgpTYRJ9CeuB6VicjLGhLset8WtFrzvtpRekcP1lq')

Как я могу вернуть значение UserID, в которое будет проходить эта вставка. Мне нужно значение UserID для некоторых других операций, может ли кто-нибудь решить это?

4b9b3361

Ответ 1

Insert into TBL (Name, UserName, Password) Output Inserted.IdentityColumnName
 Values ('example', 'example', 'example')

Ответ 2

отправить выходной параметр, например

@newId int output

в конце использования

    select @newId = Scope_Identity() 

     return @newID

Ответ 3

Получить последнее генерируемое значение. Наиболее распространенным способом является использование встроенной функции SCOPE_IDENTITY().

Кроме того, у вас также есть функция @@IDENTITY и IDENT_CURRENT ('TableName').

Select SCOPE_IDENTITY()
Select @@IDENTITY
Select IDENT_CURRENT('tblPerson')

SCOPE_IDENTITY() - возвращает последнее значение удостоверения, созданное в том же сеансе и в той же области.

@@IDENTITY - возвращает последнее значение удостоверения, созданное в том же сеансе и в любой области.

IDENT_CURRENT ('TableName') - возвращает последнее значение идентификатора, созданное для конкретной таблицы в любом сеансе и в любой области.

Пример:

SCOPE_IDENTITY() возвращает последнее значение идентичности, созданное в том же сеансе (Connection) и в той же области (в той же Хранимой процедуре, функции, триггере).

Скажем, у меня есть 2 таблицы tblPerson1 и tblPerson2, и у меня есть триггер на таблице tblPerson1, который вставляет запись в таблицу tblPerson2. Теперь, когда вы вставляете запись в таблицу tblPerson1, SCOPE_IDENTITY() возвращает значение idetentity, которое создается в таблице tblPerson1

Где, как @@IDENTITY, возвращает значение, генерируемое в таблице tblPerson2. Таким образом, @@IDENTITY возвращает последнее значение идентичности, созданное в том же сеансе, без какого-либо рассмотрения области.

IDENT_CURRENT ('tblPerson') возвращает последнее значение идентификации, созданное для конкретной таблицы, в любом сеансе и в любой области.

Ответ 4

Здесь вы найдете несколько способов получить идентификатор, включая Scope_Identity:

fooobar.com/questions/11926/...

Ответ 6

Вы можете явно вернуть столбцы Identity с помощью предложения SqlServer OUTPUT: Предполагая, что у вас есть столбец identity/auto-increment с именем ID:

$sql='INSERT INTO [xyz].[myTable] (Field1, Field2, Field3) OUTPUT Inserted.ID VALUES  (1, 2, '3')';

Обратите внимание, что в Perl DBI вы должны выполнить оператор INSERT, как и SELECT. И захватить вывод, как это было SELECT

$sth->execute($sql);
@row=$sth->fetchrow_array; #Only 1 val in 1 row returned
print "Inserted ID: ", $row[0], "\n";

Предположительно это предпочтительнее, поскольку для этого не требуется другой запрос.

Ответ 8

Вы также можете использовать SELECT @@IDENTITY

Ответ 9

@@IDENTITY

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