objectproperty() 如何判断函数在 sql server 中是否具有确定性?

Bri*_*haw 7 sql-server-2008 sql-server-2008-r2

sql server 如何判断一个函数是否是确定性的?

考虑下面的函数,我认为它是确定性的(因为它最终是一个整数运算),但是当我调用它的 objectproperty 方法时,sql server 返回 0。

了解它是如何工作的将帮助我理解为什么我对这个功能的评估是错误的。

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' );
Run Code Online (Sandbox Code Playgroud)

GSe*_*erg 7

首先查看使用的函数是否具有确定性
然后查看您的函数是否绑定了模式。
(或以相反的顺序。)

所以添加with schemabinding到你的函数中。

  • 解释[这里](http://blogs.msdn.com/b/sqlprogrammability/archive/2006/05/12/596424.aspx) (2认同)