Возвращает идентификатор последней вставленной строки из хранимой процедуры - PullRequest
4 голосов
/ 30 ноября 2010

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

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

CREATE PROCEDURE [sp_name]
    @AuthorisationCode uniqueidentifier
AS
    INSERT INTO [tablename]
           ([AuthorisationCode]
           )
     VALUES
           (@AuthorisationCode
           )

 RETURN @@IDENTITY

GO

Я вызываю эту хранимую процедуру через Execute Scalar в библиотеке Enterprise 4.1.

Возвращает ноль. Кто-нибудь увидит, что я делаю неправильно.

Ответы [ 3 ]

13 голосов
/ 30 ноября 2010

Я бы сказал, что вы должны использовать SCOPE_IDENTITY(), так как @@identity вернет идентификатор последней вставленной вещи (которая может не быть вашей хранимой процедурой, если несколько запросов выполняются одновременно).

Вытакже необходимо выбрать его, а не возвращать.

ExecuteScalar вернет значение первого столбца из первой строки набора результатов.

Итак ...

SELECT SCOPE_IDENTITY();

, вероятно, больше, чем вы хотите.

7 голосов
/ 30 ноября 2010

Вы должны использовать select, а не return, но вы также должны использовать SCOPE_IDENTITY, чтобы предотвратить проблемы с возвращением неправильной идентификации, @@ IDENTITY не ограничен конкретной областью действия.можно найти здесь:

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

0 голосов
/ 30 ноября 2010

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

...