CREATE FUNCTION dbo.fn_GetTheLatestDate
(
@DateTime1 SMALLDATETIME = NULL,
@DateTime2 SMALLDATETIME = NULL,
@DateTime3 SMALLDATETIME = NULL,
@DateTime4 SMALLDATETIME = NULL,
@DateTime5 SMALLDATETIME = NULL,
@DateTime6 SMALLDATETIME = NULL,
@DateTime7 SMALLDATETIME = NULL,
@DateTime8 SMALLDATETIME = NULL
)
RETURNS SMALLDATETIME
AS
BEGIN
DECLARE @temp TABLE (dt SMALLDATETIME)
IF @DateTime1 IS NOT NULL
BEGIN
INSERT INTO @temp ( dt )
SELECT @DateTime1
END
IF @DateTime2 IS NOT NULL
BEGIN
INSERT INTO @temp ( dt )
SELECT @DateTime2
END
IF @DateTime3 IS NOT NULL
BEGIN
INSERT INTO @temp ( dt )
SELECT @DateTime3
END
IF @DateTime4 IS NOT NULL
BEGIN
INSERT INTO @temp ( dt )
SELECT @DateTime4
END
IF @DateTime5 IS NOT NULL
BEGIN
INSERT INTO @temp ( dt )
SELECT @DateTime5
END
IF @DateTime6 IS NOT NULL
BEGIN
INSERT INTO @temp ( dt )
SELECT @DateTime6
END
IF @DateTime7 IS NOT NULL
BEGIN
INSERT INTO @temp ( dt )
SELECT @DateTime7
END
IF @DateTime8 IS NOT NULL
BEGIN
INSERT INTO @temp ( dt )
SELECT @DateTime8
END
-- Return the result of the function
RETURN (SELECT MAX(dt) FROM @temp)
END
The query that uses that function took 4 seconds to complete, and that function has an execution cost of 13% on that query
Sans table variable:
CREATE FUNCTION dbo.fn_GetTheLatestDate
(
@DateTime1 SMALLDATETIME = NULL,
@DateTime2 SMALLDATETIME = NULL,
@DateTime3 SMALLDATETIME = NULL,
@DateTime4 SMALLDATETIME = NULL,
@DateTime5 SMALLDATETIME = NULL,
@DateTime6 SMALLDATETIME = NULL,
@DateTime7 SMALLDATETIME = NULL,
@DateTime8 SMALLDATETIME = NULL
)
RETURNS SMALLDATETIME
AS
BEGIN
return
(
select max(v.d)
from
(
select @DateTime1 as d
where @DateTime1 is not null
union all
select @DateTime2
where @DateTime2 is not null
union all
select @DateTime3
where @DateTime3 is not null
union all
select @DateTime4
where @DateTime4 is not null
union all
select @DateTime5
where @DateTime5 is not null
union all
select @DateTime6
where @DateTime6 is not null
union all
select @DateTime7
where @DateTime7 is not null
union all
select @DateTime8
where @DateTime8 is not null
) as v
)
END
The query that uses that function took 0 second to complete, and that function has an execution cost of 0% on that query
No comments:
Post a Comment