Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Fonction déterministe définie par l'utilisateur SQL Server

Il vous suffit de le créer with schemabinding .

SQL Server vérifiera alors s'il répond ou non aux critères pour être considéré comme déterministe (ce qu'il fait car il n'accède à aucune table externe ou n'utilise pas de fonctions non déterministes telles que getdate() ).

Vous pouvez vérifier que cela a fonctionné avec

SELECT OBJECTPROPERTY(OBJECT_ID('[dbo].[FullNameLastFirst]'), 'IsDeterministic')

L'ajout de l'option de liaison de schéma à votre code d'origine fonctionne bien, mais une version légèrement plus simple le serait.

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