Bobik4556Ttft
@Bobik4556Ttft
Тот ещё Мухтар

Почему не выполняется процедура, не заходит в if?

CREATE PROCEDURE [Изменение платы за тариф](@Name_tarif NVARCHAR(50), @new_price INT, @now_price int OUTPUT)
AS
BEGIN
	IF(EXISTS(SELECT * FROM [Тарифы всех провайдеров] WHERE [Название тарифа] = @Name_tarif) AND @new_price > 0) BEGIN
		UPDATE [Тарифы всех провайдеров] SET [Плата] = @new_price WHERE [Название тарифа] = @Name_tarif ;
		SET @now_price = (SELECT [Плата] FROM [Тарифы всех провайдеров] WHERE [Название тарифа] = @Name_tarif);
		RETURN 1;
	END 
	ELSE RETURN 0;
END;
DECLARE @RET INT;
DECLARE @NewPrice INT;
EXECUTE @RET = [Изменение платы за тариф] @new_price = 600, @Name_tarif = N'Базовый', @now_price = @NewPrice OUTPUT;

IF(@RET = 1)BEGIN
	print N'Процедура прошла успешно. Новая плата за тариф: ' + CAST(@NewPrice as NVARCHAR);
END ELSE IF(@RET = 0) BEGIN
	print N'Процедура не прошла успешно';
END;

Выводит 'Процедура не прошла успешно'. Возвращает 0. Почему не возвращает 1?
  • Вопрос задан
  • 44 просмотра
Решения вопроса 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
CREATE OR ALTER PROCEDURE [Изменение платы за тариф](@Name_tarif NVARCHAR(50), @new_price INT)
AS
BEGIN
  UPDATE [Тарифы всех провайдеров] 
    SET [Плата] = @new_price 
    WHERE [Название тарифа] = @Name_tarif AND @new_price > 0
  RETURN @@ROWCOUNT
END
GO

DECLARE @RET INT;
DECLARE @new_price INT = 600
EXECUTE @RET = [Изменение платы за тариф] N'Базовый', @new_price

IF (@RET > 0 ) PRINT N'Процедура прошла успешно. Новая плата за тариф: ' 
                        + CAST( @new_price AS NVARCHAR )
ELSE PRINT N'Процедура не прошла успешно'
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Bobik4556Ttft
@Bobik4556Ttft Автор вопроса
Тот ещё Мухтар
А всё разобрался.
Там нужно использовать не exitst, а агрегатную функцию count(*)
IF(EXISTS(SELECT * FROM [Тарифы всех провайдеров] WHERE [Название тарифа] = @Name_tarif) AND @new_price > 0)

IF((SELECT COUNT(*) FROM [Тарифы всех провайдеров] WHERE [Название тарифа] = @Name_tarif) > 0 AND @new_price > 0)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы