我有一个使用 Windows 任务管理器执行的存储过程,如果条件为真,我想添加一个执行另一个存储过程的条件语句。我正在考虑一个 case 语句,但我在 CASE 附近得到了一个无效的语法,并且根据这个响应,在 select 或 case 子句中执行存储过程是不允许的,如果满足条件,我将如何在表上执行存储过程。
这是存储过程:
SET NOCOUNT ON;
UPDATE Supply
SET [Quantity] = [Quantity] - [SupplyHalfLife]
UPDATE Supply
SET SupplyAlert = CASE WHEN Quantity <= SupplyQuantityAlert THEN 'Y' ELSE 'N' END
这就是我要添加的内容:
SELECT a.SupplyName
CASE a.SupplyAlert
WHEN 'Y' THEN dbo.sp_SendMail @body = a.SupplyName END
FROM Supply a
它检查列的警报状态“Y”并执行存储过程。
我最终使用的代码:
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
请记住,这
CASE
是一个函数,而不是控制流语句。