我试图从存储过程中获取最后一个插入的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);
答案 0 :(得分:1)
您真的不需要@id
变量。
CREATE PROCEDURE [dbo].[sp_InsertProduct]
@ProductName varchar(30),
@ProductPrice decimal ,
@ProductQuantity int,
AS
BEGIN
INSERT INTO Product (ProductName,ProductPrice,ProductQuantity) VALUES (@ProductName,@ProductPrice,@ProductQuantity)
RETURN SCOPE_IDENTITY();
END
答案 1 :(得分:1)
您只需从存储过程中返回值(无需输入参数):
CREATE PROCEDURE [dbo].[sp_InsertProduct]
@ProductName varchar(30),
@ProductPrice decimal ,
@ProductQuantity int
AS
BEGIN
INSERT INTO Product (ProductName,ProductPrice,ProductQuantity) VALUES (@ProductName,@ProductPrice,@ProductQuantity)
RETURN SCOPE_IDENTITY()
END
然后从您的C#代码中获得一个输出参数,其中包含SP的返回值:
var returnValue = new SqlParameter("@ReturnValue", SqlDbType.Int)
{
Direction = ParameterDirection.Output
};
var ProductParameters = new[]{
new SqlParameter("@ProductName",Product.ProductName),
new SqlParameter ("@ProductPrice",Product.ProductPrice),
new SqlParameter ("@ProductQuantity",Product.ProductQuantity),
returnValue
};
db.Database.ExecuteSqlCommand("EXEC @ReturnValue = sp_InsertProduct @ProductName,@ProductPrice,@ProductQuantity", ProductParameters);
var scopeIdentity = (int)returnValue.Value;