Возвращает идентификатор последней вставленной строки из хранимой процедуры

Я пытаюсь вернуть идентификатор последней вставленной строки из хранимой процедуры.

Упрощенная версия моего кода выглядит так:

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()

Более подробную информацию можно найти здесь:

http://msdn.microsoft.com/en-us/library/ms190315.aspx

Ты должен использовать select @@identity

Другие вопросы по тегам