Хранимая процедура SQL Server всегда возвращает 0

#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. Спасибо за помощь, получил значение, которое я хотел!