【发布时间】:2016-06-21 15:55:32
【问题描述】:
我创建了一个小函数,它接受一些日期参数并根据我定义的一些逻辑输出项目状态。
我试图弄清楚一旦设置了状态,我如何“打破”该功能。在我下面的逻辑中,它似乎总是会检查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而不是设置变量? -
为什么不早点
RETURN?或使用嵌套的IF块,如果您想坚持“只有 1 个返回语句”
标签: sql sql-server tsql stored-procedures sql-server-2012