积极答复者
函数确定性问题

问题
答案
-
在WITH 中指定 SCHEMABINDING 就好了, 参考:
use tempdb; go create function dbo.f1() returns int as begin; return 1; end; go create function dbo.f2() returns int with schemabinding as begin; return 1; end; go select f1 = OBJECTPROPERTY(OBJECT_ID('dbo.f1'), 'IsDeterministic'), f2 = OBJECTPROPERTY(OBJECT_ID('dbo.f2'), 'IsDeterministic') ; go drop function dbo.f1, dbo.f2 /* return f1 f2 ----------- ----------- 0 1 (1 row(s) affected) */
- 已标记为答案 SQL STUDIO 2009年12月4日 6:20
全部回复
-
在WITH 中指定 SCHEMABINDING 就好了, 参考:
use tempdb; go create function dbo.f1() returns int as begin; return 1; end; go create function dbo.f2() returns int with schemabinding as begin; return 1; end; go select f1 = OBJECTPROPERTY(OBJECT_ID('dbo.f1'), 'IsDeterministic'), f2 = OBJECTPROPERTY(OBJECT_ID('dbo.f2'), 'IsDeterministic') ; go drop function dbo.f1, dbo.f2 /* return f1 f2 ----------- ----------- 0 1 (1 row(s) affected) */
- 已标记为答案 SQL STUDIO 2009年12月4日 6:20
-
我错了,zjcxc是对的,WITH SCHEMABINDING 就能把fT1变成确定性的了。MSDN没有写清楚这一点。
http://msdn.microsoft.com/en-us/library/ms186755.aspx 提到:Local data access is allowed in deterministic functions,这应该是你指的cache的意思。
Relate all.