Возвращает идентификатор последней вставленной строки из хранимой процедуры
Я пытаюсь вернуть идентификатор последней вставленной строки из хранимой процедуры.
Упрощенная версия моего кода выглядит так:
CREATE PROCEDURE [sp_name]
@AuthorisationCode uniqueidentifier
AS
INSERT INTO [tablename]
([AuthorisationCode]
)
VALUES
(@AuthorisationCode
)
RETURN @@IDENTITY
GO
Я вызываю эту хранимую процедуру через Execute Scalar в библиотеке Enterprise 4.1.
Возвращает ноль. Кто-нибудь видит, что я делаю не так.
3 ответа
Я бы сказал, что вы должны использовать SCOPE_IDENTITY()
как @@identity
вернет идентификатор последней вставленной вещи (которая может не быть вашей хранимой процедурой, если несколько запросов выполняются одновременно).
Вы также должны выбрать его, а не вернуть его.
ExecuteScalar
вернет первое значение столбца из первой строки набора результатов.
Так...
SELECT SCOPE_IDENTITY();
вероятно, больше того, что вы хотите.
Вы должны использовать select, а не return, но вы также должны использовать SCOPE_IDENTITY, чтобы предотвратить возникновение проблем с неправильной идентификацией, @@IDENTITY не ограничивается конкретной областью действия.
SELECT SCOPE_IDENTITY()
Более подробную информацию можно найти здесь: