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