4

ストアド プロシージャから最後に挿入された行の ID を返そうとしています。

私のコードの簡略版は次のようになります。

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

 RETURN @@IDENTITY

GO

Enterprise ライブラリ 4.1 の Execute Scalar を介してこのストアド プロシージャを呼び出しています。

null を返します。誰でも私が間違っていることを知っています。

4

3 に答える 3

13

SCOPE_IDENTITY()最後に挿入されたものの ID を返すasを使用する必要があると思います@@identity(複数のクエリが同時に実行されている場合、これはストアド プロシージャではない可能性があります)。

また、RETURN ではなく SELECT する必要があります。

ExecuteScalar結果セットの最初の行から最初の列の値を返します。

そう...

SELECT SCOPE_IDENTITY();

おそらくあなたが望むものです。

于 2010-11-30T15:56:10.183 に答える
7

return ではなく select を使用する必要がありますが、間違った ID が返される問題を防ぐために SCOPE_IDENTITY も使用する必要があります。@@IDENTITY は特定のスコープに限定されません。

SELECT SCOPE_IDENTITY()

詳細については、次を参照してください。

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

于 2010-11-30T15:55:19.963 に答える
0

あなたが使用する必要がありますselect @@identity

于 2010-11-30T15:53:32.523 に答える