Stored-Procedures
如果條件為真,儲存過程評估列執行另一個儲存過程
我有一個使用 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
如果滿足條件,我將如何在表上執行儲存過程。
if exists (select 1 from Supply where SupplyAlert = 'Y') begin exec dbo.sp_SendMail end else print 'Nothing to send !'
請記住,這
CASE
是一個函式,而不是控制流語句。