Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Sql Server deterministische benutzerdefinierte Funktion

Sie müssen es nur with schemabinding erstellen .

SQL Server überprüft dann, ob es die Kriterien erfüllt, um als deterministisch betrachtet zu werden (was es tut, da es nicht auf externe Tabellen zugreift oder nicht deterministische Funktionen wie getdate() verwendet). ).

Sie können überprüfen, ob es funktioniert hat mit

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

Das Hinzufügen der Schemabinding-Option zu Ihrem Originalcode funktioniert gut, aber eine etwas einfachere Version wäre.

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