GETDATE() ist nichtdeterministisch. Eine deterministische Funktion liefert ceteris paribus immer das gleiche Ergebnis. Da GETDATE() keine Argumente entgegennimmt und stets unterschiedliche Werte zurückgibt, ist die Funktion nicht deterministisch. Dies ist auch der Grund, warum man GETDATE() nicht als DEFAULT innerhalb der Funktion definieren kann. Nur deterministische Funktionen können, wie in BOL beschrieben, in UDF's verwendet werden.
Man kann das aber umgehen, indem man einen VIEW erzeugt, der GETDATE() zurückgibt und dann diesen VIEW in der UDF referenziert.
USE MASTER GO SELECT CASE OBJECTPROPERTY(id, 'IsMSShipped') WHEN 1 THEN 'Bei Installation erzeugt' WHEN 0 THEN 'Nicht bei Installation erzeugt' END AS [Bei Installation Erzeugt] , CAST(name AS CHAR(30)) AS [name] FROM sysobjects WHERE name = 'sp_helpdb' OR name = 'sp_MBL_SORT' Bei Installation Erzeugt name ------------------------------ ------------------------------ Bei Installation erzeugt sp_helpdb Nicht bei Installation erzeugt sp_MBL_SORT (2 row(s) affected)
Direktes Updaten der Systemtabellen ist eine der schnellsten Methoden, um SQL Server in die Irre zu führen. Daher sollte dies nur im Notfall angewendet werden: