#sql-server #stored-procedures
#sql-сервер #хранимые процедуры
Вопрос:
Меня попросили вычислить процент от числа с помощью хранимой процедуры в SQL Server, но по какой-то причине, независимо от того, каковы параметры, я всегда получаю 0.
Мой вопрос в том, что здесь происходит?
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE pCalcular
@PrecioTotal INT,
@cantidad INT
AS
BEGIN
PRINT ' Calculando ' CAST (@PrecioTotal * @cantidad AS VARCHAR(40))
SELECT @cantidad = @PrecioTotal * @cantidad
END
Я вызываю процедуру следующим образом, я не уверен, в чем проблема.
DECLARE @abc AS INT
EXEC @abc = pCalcular 70, .1
PRINT @abc
Комментарии:
1. 0 — это просто код возврата процедуры. 0 означает, что он был выполнен успешно.
Ответ №1:
Вы только устанавливаете значение @cantidad в процедуре. Вам просто нужно ВЫБРАТЬ это значение из процедуры. Попробуйте просто иметь;
SELECT @PrecioTotal * @cantidad
Кроме того, взгляните на другие способы возврата данных из процедур, таких как OUTPUT
параметры.
Редактировать:
Ваша процедура должна выглядеть следующим образом;
ALTER PROCEDURE pCalcular
@PrecioTotal INT,
@cantidad INT
AS
BEGIN
PRINT ' Calculando ' CAST (@PrecioTotal * @cantidad AS VARCHAR(40))
SELECT @PrecioTotal * @cantidad
END
Комментарии:
1.
ALTER PROCEDURE pCalcularIva -- Add the parameters for the stored procedure here (@total INT,@porcentaje INT, @result INT OUTPUT) AS BEGIN SELECT @result = @total * @porcentaje SELECT @result END GO
2. Упс, не закончил писать свой комментарий, я сожалею об этом. Как насчет чего-то подобного? В этом случае я протестировал ее, и она все равно вернула 0.
3. Нет. В этом случае вам не нужно выбирать в переменную. Вы просто выбираете набор данных, возвращаемый из процедуры. См. Редактирование моего ответа.
4. Спасибо за помощь, получил значение, которое я хотел!