Você só precisa criá-lo
with schemabinding
. O SQL Server verificará se atende ou não aos critérios para ser considerado determinístico (o que ele faz, pois não acessa nenhuma tabela externa ou usa funções não determinísticas, como
getdate()
). Você pode verificar se funcionou com
SELECT OBJECTPROPERTY(OBJECT_ID('[dbo].[FullNameLastFirst]'), 'IsDeterministic')
Adicionar a opção schemabinding ao seu código original funciona bem, mas uma versão um pouco mais simples seria.
CREATE FUNCTION [dbo].[FullNameLastFirst] (@IsPerson BIT,
@LastName NVARCHAR(100),
@FirstName NVARCHAR(100))
RETURNS NVARCHAR(201)
WITH SCHEMABINDING
AS
BEGIN
RETURN CASE
WHEN @IsPerson = 0
OR @FirstName = '' THEN @LastName
ELSE @LastName + ' ' + @FirstName
END
END