首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

sql server 计算列用的自定义函数为什么不能建索引

2012-07-04 
sql server 计算列用的自定义函数为何不能建索引我的计算列用到下面这个自定义函数SQL codeCREATE FUNCTIO

sql server 计算列用的自定义函数为何不能建索引
我的计算列用到下面这个自定义函数

SQL code
CREATE FUNCTION [dbo].[f_recommendCondition]    (      @views INT ,      @replies INT ,      @digest TINYINT    )RETURNS INTAS     BEGIN        DECLARE @returnValue INT ;        IF ( @digest IN ( 1, 2, 3, 10 )             AND @views > 99             AND @replies > 9           )             SET @returnValue = 1         ELSE             SET @returnValue = 0                     RETURN @returnValue ;        END


每次为计算列 建立索引时都提示
此列具有不确定性。我这个函数难道不是确定性函数么?
求高手指点

[解决办法]
不可以,计算列是必须在插入时和插入后该值都为确定的,而你使用函数的情况下,如果插入之后修改函数内容可能造成计算结果的不相同,导致修改前和修改后计算出来的值不一样。
[解决办法]
你这个函数这么简单,直接用CASE WHEN搞定好了
[解决办法]
探讨

引用:

不可以,计算列是必须在插入时和插入后该值都为确定的,而你使用函数的情况下,如果插入之后修改函数内容可能造成计算结果的不相同,导致修改前和修改后计算出来的值不一样。

msdn上确定性函数的定义:只要使用特定的输入值集并且数据库具有相同的状态,那么不管何时调用,确定性函数始终都会返回相同的结果。
我这个函数应该满足这个定义啊?

热点排行