• Start
  • über mich
  • Projekte
  • »Artikel«
  • Impressum
  • Qooxdoo
  • AJAX, eine saubere Sache
  • Das Dreamteam
  • Dublettenabgleichen
  • Meldungen ins Eventlog
  • »Snippets«

no software patents
get firefox browser

kleine Fallen die das Programmieren schwer machen

MSSQL-Server, User-Def. Functions und Nicht Determistische Funktionen

Folgender Versuch:

create function test() returns datetime
as
Begin
  declare @a datetime
  set @a = getdate()
  return @a
end;

Der SQL Server quitiert das erstellen mit der Fehlermeldung:

Ungültige Verwendung von 'getdate' in einer Funktion.

bzw.

Invalid use of 'getdate' within a function.

Grund ist das der SQL Server nicht zulässt in Funktionen determistische Funktionen zu nutzen. Darunter fallen z.B. Rand() und GetDate().

Workaround

CREATE VIEW dbo.VIEW_GETDATE
AS
SELECT GETDATE() AS NOW
create function test()
returns datetime
as
Begin
  declare @a datetime
  set @a = (select now from view_getdate)
  return @a
end

Wichtig allerdings zu wissen ist, dass der Workaround nicht mehr auf dem MSSQL 2005 funktioniert. Dieser macht genauere Prüfungen und bricht dann die Ausführung ab.