Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Função definida pelo usuário determinística do Sql Server


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