Eu tenho um procedimento armazenado que é executado com o gerenciador de tarefas do Windows e desejo adicionar uma declaração de condição que executa outro procedimento armazenado se a condição for verdadeira. Eu estava pensando em uma instrução case, mas recebo uma sintaxe inválida perto de CASE e, de acordo com esta resposta, a execução de um procedimento armazenado em uma cláusula select ou case não é permitida, como eu executaria um procedimento armazenado em uma tabela se uma condição fosse atendida.
Este é o procedimento armazenado:
SET NOCOUNT ON;
UPDATE Supply
SET [Quantity] = [Quantity] - [SupplyHalfLife]
UPDATE Supply
SET SupplyAlert = CASE WHEN Quantity <= SupplyQuantityAlert THEN 'Y' ELSE 'N' END
e é isso que eu quero adicionar a ele:
SELECT a.SupplyName
CASE a.SupplyAlert
WHEN 'Y' THEN dbo.sp_SendMail @body = a.SupplyName END
FROM Supply a
que verifica a coluna para um status de alerta de 'Y' e executa um procedimento armazenado.
Código que finalmente usei:
DECLARE @name varchar(255)
DECLARE cur CURSOR LOCAL FOR
SELECT SupplyName FROM Supply WHERE SupplyAlert = 'Y'
OPEN cur
FETCH NEXT FROM cur INTO @name
WHILE @@FETCH_STATUS = 0 BEGIN
--execute your sproc on each row
EXEC dbo.SendMail @name
FETCH NEXT FROM cur INTO @name
END
CLOSE cur
DEALLOCATE cur
Lembre-se de que
CASE
é uma função e não uma instrução de fluxo de controle.