Ответ 1
Insert into TBL (Name, UserName, Password) Output Inserted.IdentityColumnName
Values ('example', 'example', 'example')
Возможно ли, чтобы сервер sql с помощью хранимой процедуры возвращал значение столбца идентификатора в таблице, в которую вставлены некоторые значения? Например, используя хранимую процедуру, если мы вставляем данные в таблицу:
Таблица TBL
Итак, если я запустил процедуру хранения, вставив некоторые значения, например:
Insert into TBL (Name, UserName, Password)
Values ('example', 'example', '$2a$12$00WFrz3dOfLaIgpTYRJ9CeuB6VicjLGhLset8WtFrzvtpRekcP1lq')
Как я могу вернуть значение UserID
, в которое будет проходить эта вставка. Мне нужно значение UserID для некоторых других операций, может ли кто-нибудь решить это?
Insert into TBL (Name, UserName, Password) Output Inserted.IdentityColumnName
Values ('example', 'example', 'example')
отправить выходной параметр, например
@newId int output
в конце использования
select @newId = Scope_Identity()
return @newID
Получить последнее генерируемое значение. Наиболее распространенным способом является использование встроенной функции 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') возвращает последнее значение идентификации, созданное для конкретной таблицы, в любом сеансе и в любой области.
Здесь вы найдете несколько способов получить идентификатор, включая Scope_Identity:
SELECT SCOPE_IDENTITY()
после инструкции insert
Пожалуйста, обратитесь к следующим ссылкам
Вы можете явно вернуть столбцы 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";
Предположительно это предпочтительнее, поскольку для этого не требуется другой запрос.
Вы можете использовать Scope_Identity(), чтобы получить последнее значение.
Прочтите также:
Вы также можете использовать SELECT @@IDENTITY
@@IDENTITY
После завершения инструкции INSERT, SELECT INTO или массового копирования @@IDENTITY содержит последнее значение идентификации, которое генерируется оператором. Если оператор не влиял на таблицы с столбцами идентификаторов, @@IDENTITY возвращает NULL. Если несколько строк вставляются, генерируя несколько идентификационных значений, @@IDENTITY возвращает последнее генерируемое значение. Если оператор запускает один или несколько триггеров, которые выполняют вставки, которые генерируют значения идентификатора, вызывая @@IDENTITY сразу после того, как оператор возвращает последнее значение идентификации, генерируемое триггерами. Если триггер запускается после действия вставки в таблице с столбцом идентификации, а триггер вставляет в другую таблицу, которая не имеет столбца идентификатора, @@IDENTITY возвращает значение идентификатора первой вставки. Значение @@IDENTITY не возвращается к предыдущему параметру, если сбой инструкции INSERT или SELECT INTO или массовой копии или откат транзакции.