• Gregory Hart (8/29/2016)


    The below is what I have used in the past to accomplish the need for a Scalar UDF in MS SQL:

    IF OBJECT_ID('tempdb..##fn_CORP_Divide') IS NOT NULL DROP PROCEDURE ##fn_CORP_Divide;

    CREATE PROCEDURE ##fn_CORP_Divide (@Numerator Real, @Denominator Real) AS

    BEGIN

    SELECT Division =

    CASE WHEN @Denominator != 0 AND @Denominator is NOT NULL AND @Numerator != 0 AND @Numerator is NOT NULL THEN

    @Numerator / @Denominator

    ELSE

    0

    END

    RETURN

    END;

    EXEC ##fn_CORP_Divide 6,4

    This approach which uses a global variable for the PROCEDURE allows you to make use of the function not only in your scripts, but also in your Dynamic SQL needs.

    That doesn't use a "global variable". It creates a proc name that starts with ##. Only table names like that become global temp tables. The proc name is just an (unusual) proc name. You can create procs in any db named ##whatever if you like.

    SQL DBA,SQL Server MVP(07, 08, 09) A socialist is someone who will give you the shirt off *someone else's* back.