Stored-Procedures

如果條件為真,儲存過程評估列執行另一個儲存過程

  • May 23, 2014

我有一個使用 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是一個函式,而不是控制流語句。

引用自:https://dba.stackexchange.com/questions/65804