Ich habe eine kleine Funktion erstellt, die einige Datumsparameter akzeptiert und einen Projektstatus basierend auf einer von mir definierten Logik ausgibt.TSQL Scalar-Funktion
Ich versuche herauszufinden, wie ich die Funktion "ausbrechen" kann, sobald ein Status festgelegt wurde. In meiner Logik unten scheint es, dass es immer die dueDate
überprüft und seinen Status setzt und überschreibt es dann selbst mit der folgenden Kontrolle.
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
Sobald ein Status gesetzt wurde, muss ich aus dieser Funktion brechen, so der Status nicht wieder durch die Logik überschrieben wird, der ihm folgt.
Gibt es einen besseren Weg, damit umzugehen?
decken Warum nicht nur 'return' aus den' IF' Aussagen stattdessen eine Variable der Einstellung? –
warum nicht einfach 'RETURN' früh? oder verwenden Sie verschachtelte 'IF'-Blöcke, wenn Sie bei" nur 1 return statement "bleiben möchten – Jamiec
oder' ELSE' verwenden ... –