TRY_CAST或FLOAT而不是UDF

时间:2018-06-13 13:38:20

标签: sql try-catch user-defined-functions

以下功能在我们的DW过夜构建期间被广泛使用超过200次。但是,当我用代码替换函数时,每个查询的时间减少了50%,所以我在想为什么我们首先使用该函数并且最好直接将它输入到SQL INSERT查询中?是否有更好的解决方案,如TRY_CAST。我们在2012版本,虽然是2008版本的前端产品,但不支持TRY_CAST。

CREATE FUNCTION [dbo].[udf_GetDateFromDateTime] (
        @Date       DATETIME
    )
RETURNS DATETIME

AS

    BEGIN

        /*______________________________________________
        **Declare Local Variables
        **______________________________________________*/
        DECLARE @ReturnValue DATETIME

        /*______________________________________________
        **Checks for null values
        **______________________________________________*/
        IF @Date is null 
            SET @ReturnValue = null
        ELSE
            BEGIN

        /*______________________________________________
        **Converts the date to float, rounds it down to the nearest integer
        **then converts it to datetime
        **______________________________________________*/
                SET @ReturnValue = CAST(FLOOR(CAST(@Date AS FLOAT)) AS DATETIME)
            END

        /*______________________________________________
        **Return the result
        **______________________________________________*/
        RETURN @ReturnValue
    END
GO

0 个答案:

没有答案