ストアドプロシージャから最後に挿入されたIDを取得しようとしていますが、できません。ストアドプロシージャから最後に挿入された行を返すことはできません
私がしたいのはSCOPE_IDENTITY()
です。
私のストアドプロシージャは、次のようになります。
CREATE PROCEDURE [dbo].[sp_InsertProduct]
@ProductName varchar(30),
@ProductPrice decimal ,
@ProductQuantity int,
@id int output
AS
BEGIN
INSERT INTO Product (ProductName, ProductPrice, ProductQuantity)
VALUES (@ProductName, @ProductPrice, @ProductQuantity)
SET @id = SCOPE_IDENTITY()
RETURN @id
END
、ここでは、私のC#のコード
var ProductParameters = new[] {
new SqlParameter("@ProductName", Product.ProductName),
new SqlParameter ("@ProductPrice", Product.ProductPrice),
new SqlParameter ("@ProductQuantity", Product.ProductQuantity)
};
var y = db.Database.ExecuteSqlCommand("EXEC sp_InsertProduct @ProductName, @ProductPrice, @ProductQuantity", ProductParameters);
@idは、OUTPUTパラメータであってはなりません。単純に値を返します。私は、SQLコマンドの呼び出しがエラーをスローすると思われる:そのような "何がうまくいかない"結果に注意を払う。 – user2864740
サイドノート:ストアドプロシージャのプレフィックス 'sp_'を使用しないでください**。マイクロソフトは、[*ストアドプロシージャの名前付け*を参照してください](http://msdn.microsoft.com/en-us/library/ms190669%28v=sql.105%29.aspx)、およびあなたはいつか名前衝突のリスクを将来実行します。 [ストアドプロシージャのパフォーマンスにも悪い](http://www.sqlperformance.com/2012/10/t-sql-queries/sp_prefix)単に 'sp_'を避け、他の何かを接頭辞として使うのが最善です。 –