HiveBrain v1.2.0
Get Started
← Back to all entries
patternMinor

How does objectproperty() figure out if a function is deterministic in sql server?

Submitted by: @import:stackexchange-dba··
0
Viewed 0 times
figuresqlfunctionobjectpropertydeterministicdoeshowserverout

Problem

How does sql server determine if a function is deterministic or not?

Consider the following function, I think it's deterministic (as it's ultimately an integer operation), but sql server returns 0 when I call the objectproperty method on it.

Understanding how it works will help me understand why I'm wrong in my assessment of this function.

CREATE FUNCTION dbo.EndOfPreviousMonth ( @Date date )
RETURNS date
AS BEGIN
    RETURN DATEADD(day, 0 - DAY(@Date), @Date);
END;

SELECT dbo.EndOfPreviousMonth('2010-01-01'); --Usage example

--Returns 0, I expected it to return 1
SELECT OBJECTPROPERTY( OBJECT_ID( 'dbo.EndOfPreviousMonth' ), 'IsDeterministic' );

Solution

First it looks whether used functions are deterministic.

Then it looks whether your function is schema bound.

(Or in reverse order.)

So add with schemabinding to your function.

Context

StackExchange Database Administrators Q#12594, answer score: 7

Revisions (0)

No revisions yet.