我有一个存储过程,它没有返回正确的值,例如应该返回33.30,但它返回33.00,这不是期望的结果。这是我的存储过程,我正在使用SQL Server 2008。
ALTER PROCEDURE [dbo].[sp_UpdateStockForSale]
@prodName varchar(40),
@stqty numeric(9,2),
@batchno varchar(40),
@IsSample varchar(5)
AS
BEGIN
SET NOCOUNT ON;
DECLARE @S_en int;
DECLARE @ttavail numeric(9,0);
DECLARE @ttsold numeric(9,0);
DECLARE @Nr decimal(9,2);
DECLARE @NetRate decimal(9,2)
SET @NetRate=0.0;
While (@stqty > 0) BEGIN
Select @S_en=S_en,@ttavail=S_P_ttavail, @ttsold=S_P_ttsold,@Nr=NetRate From STOCK WHERE S_P_ttavail>0 AND S_P_name = @prodName AND S_P_batchno=@batchno And IsSample=@IsSample Order By S_en DESC;
--If Sale Qty is more than Stock
IF (@ttavail <= @stqty) BEGIN
SET @stqty = @stqty - @ttavail;
SET @ttsold=@ttsold + @ttavail;
SET @NetRate=@NetRate+(@Nr*@ttavail);
Print (@NetRate);
SET @ttavail = 0;
END
--If Sale Qty is less than STOCK
ELSE IF(@stqty < @ttavail) BEGIN
SET @ttsold = @ttsold + @stqty
SET @ttavail = @ttavail - @stqty;
SET @NetRate=@NetRate+(@Nr*@stqty);
Print (@NetRate);
SET @stqty = 0;
END
Update STOCK Set S_P_ttavail = @ttavail, S_P_ttsold=@ttsold Where S_en=@S_en And IsSample=@IsSample
END
print @NetRate
return @NetRate
END
当我在SSMS中执行它时,我得到了结果和消息,显示了我打印的值,这表明数据获取和计算都给出了正确的结果[请参见最后一个打印的值]。 我需要将这个值保存在另一个表中,所以这是C#代码。
cmd = new SqlCommand("sp_UpdateStockForSale ", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@prodName", dataGridView1.Rows[i].Cells["P_name"].Value);
cmd.Parameters.AddWithValue("@stqty", dataGridView1.Rows[i].Cells["P_otabs"].Value); //total tabs
cmd.Parameters.AddWithValue("@batchno ", dataGridView1.Rows[i].Cells["P_batch_no"].Value);
cmd.Parameters.AddWithValue("@IsSample ", dataGridView1.Rows[i].Cells["IsSample"].Value);
var returnParameter = cmd.Parameters.Add("@NetRate", SqlDbType.Decimal);
returnParameter.Direction = ParameterDirection.ReturnValue;
cmd.ExecuteNonQuery();
var result = returnParameter.Value;
请帮助我,谢谢。
@return_value
设为小数类型(decimal)并保留两位小数? - MilenRETURN
用于返回一个 整数型错误代码。如果您想要输出一个值,应该使用一个 OUTPUT 参数(或者更常见的做法是通过 SELECT 语句来选择并让调用者读取该值)。 - TZHXsp_
前缀。Microsoft已经保留了该前缀供自己使用(请参阅命名存储过程),而且您将来可能会遇到名称冲突的风险。这也会影响您的存储过程性能。最好只是避免使用sp_
,使用其他前缀或根本不使用前缀! - marc_s