У меня есть хранимая процедура, которая не возвращает правильное значение, например. он должен вернуть 33,30, но он возвращает 33,00, что нежелательно. это моя хранимая процедура, я использую SQL сервер 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 [email protected] And [email protected] Order By S_en DESC;
--If Sale Qty is more than Stock
IF (@ttavail <= @stqty) BEGIN
SET @stqty = @stqty - @ttavail;
SET @[email protected] + @ttavail;
SET @[email protected]+(@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 @[email protected]+(@Nr*@stqty);
Print (@NetRate);
SET @stqty = 0;
END
Update STOCK Set S_P_ttavail = @ttavail, [email protected] Where [email protected]_en And [email protected]
END
print @NetRate
return @NetRate
END
, когда я исполняю его в SSMS я получаю результат
и сообщение, которое показывает значения я отпечатанные, который показывает данные, получающие n вычислений, дают правильный результат [см. последнее напечатанное значение].
Мне нужно это значение, чтобы сохранить в другой таблице, так что это 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;
пожалуйста, помогите мне .thanks.
сделать '@ return_value' десятичным (18,2) например? – Milen
'RETURN' из sproc используется для возврата ** целочисленного кода ошибки **. Если вы хотите вывести значение, вы должны использовать параметр OUTPUT (или, более типично, просто ВЫБЕРИТЕ его и попросите читателя прочитать значение). – TZHX
Боковое примечание: вы не должны ** использовать префикс 'sp_' для ваших хранимых процедур. Microsoft [зарезервировала этот префикс для собственного использования (см. * Именование сохраненных процедур *)] (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_' и использовать что-то еще в качестве префикса - или никакого префикса вообще! –