我創建了一個小函數,該函數需要幾個日期參數,並根據我定義的某些邏輯輸出項目狀態。TSQL標量函數
我想弄清楚如何一旦狀態已經設置,我可以「突破」的功能。在我的邏輯下面,它似乎總是要檢查dueDate
並設置它的狀態,然後用下面的檢查覆蓋它自己。
ALTER FUNCTION [dbo].[Fetch_TaskStatus]
(
-- Add the parameters for the function here
@startDate DATE = NULL,
@dueDate DATE = NULL,
@completionDate DATE = NULL
)
RETURNS varchar(100)
AS
BEGIN
-- Declare the return variable here
DECLARE @status varchar(100);
-- Declare our current date
DECLARE @now DATE = GETUTCDATE();
-- Logic
-- If our start date and completion date are missing..
IF(@startDate IS NULL AND @completionDate IS NULL)
BEGIN
-- If our due date is past the current date, its past due
IF(@dueDate < @now)
BEGIN
SET @status = 'Past Due';
END
-- We have a start date but the task has not been started.
SET @status = 'Inactive';
END
-- If we have a start date and no completion date
IF(@startDate IS NOT NULL AND @completionDate IS NULL)
BEGIN
-- Are we past due?
IF(@dueDate < @now)
BEGIN
SET @status = 'Past Due'
END
-- We are not past due, must be in progress
SET @status = 'In Progress'
END
-- If we have a start date and a completion date
IF(@startDate IS NOT NULL AND @completionDate IS NOT NULL)
BEGIN
-- We have started and completed our task
SET @status = 'Complete'
END
-- Return the result of the function
RETURN @status
END
一旦設置了狀態,我需要跳出此功能,以便狀態不會被其後面的邏輯再次覆蓋。
有沒有更好的方法來處理這個問題?
爲什麼不'從'IF'語句中,而不是設置變量的RETURN'? –
爲什麼不僅僅是'返回'早?或者如果你想堅持「只有1個返回語句」 – Jamiec
或使用'ELSE',則使用嵌套的'IF'塊 –