Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Sql Server funzione deterministica definita dall'utente

Devi solo crearlo with schemabinding .

SQL Server verificherà quindi se soddisfa o meno i criteri per essere considerato deterministico (cosa che fa poiché non accede a tabelle esterne o utilizza funzioni non deterministiche come getdate() ).

Puoi verificare che abbia funzionato con

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

L'aggiunta dell'opzione di schemabinding al codice originale funziona bene, ma sarebbe una versione leggermente più semplice.

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