我有以下自定义函数:
create function [dbo].[FullNameLastFirst]
(
@IsPerson bit,
@LastName nvarchar(100),
@FirstName nvarchar(100)
)
returns nvarchar(201)
as
begin
declare @Result nvarchar(201)
set @Result = (case when @IsPerson = 0 then @LastName else case when @FirstName = '' then @LastName else (@LastName + ' ' + @FirstName) end end)
return @Result
end
我无法使用此函数在计算列上创建索引,因为它不是确定性的。 有人能解释一下为什么它不是确定性的,最终如何修改使其确定性? 谢谢。
ARITHABORT
或者ANSI_WARNINGS
中的任意一个选项,它应该会自动使用已持久化的列值。你可以检查执行计划来确定这一点。 - Martin Smith