• Chris, it appears that SQL Server requires the WITH SCHEMABINDING function option in order for a function to be identified as deterministic.

    Here is a completely meaningless sample to show how SQL server handles deterministic functions.

    ALTER FUNCTION dbo.fnDateAdd(@intA int)

    RETURNS int

    WITH SCHEMABINDING

    AS

    BEGIN

    RETURN @intA

    END

    GO

    -- This should return 1

    SELECT objectpropertyex(object_id('dbo.fnDateAdd'), N'IsDeterministic')

    -- This will only call the function once

    SELECT * FROM sysobjects WHERE [id] <= dbo.fnDateAdd(object_id('dbo.fnDateAdd'))

    -- This will call the function for every row in sysobjects.

    SELECT * FROM sysobjects WHERE [id] <= dbo.fnDateAdd([id])