COALESCE, IFNULL, oder NZ () - Funktion, die verwendet werden können, die in SQL Server und MS Access
Ich ein Projekt haben, das kann entweder SQL Server oder MS Access als datenspeicher. In einer SELECT-Anweisung, die ich durchführen muss, COALESCE-operation auf eine einzelne Spalte und einem einzelnen Wert, wie diese:
SELECT COALESCE([Amount], 0) FROM PaymentsDue;
Möchte ich schreiben, eine einzelne SQL-Anweisung, die ausgeführt wird, ordnungsgemäß in SQL Server und MS Access. Die SQL Server-version, die von unmittelbarem Interesse ist 2008 zwar eine Lösung, anwendbar auf Versionen bevorzugt.
Früher heute, war jemand in der Lage zeigen Sie mir einen SQL-trick, die mir erlaubt die Verwendung einer einzelnen SELECT-Anweisung effektiv GEWIRKT eine DATETIME-to-DATE. Ich Frage mich, ob jemand einen ähnlichen trick durchführen COALESCE (z.B. IFNULL oder NZ) - operation in einer Weise, die angewendet werden können, um beide SQL Server und MS Access?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies funktionieren wird, aber es ist klobig:
Natürlich, wenn Sie mehr als eine Spalte, diese wird schnell unüberschaubar.
Amount = 0
Teil funktioniert nicht in Access. Es sollte0 AS Amount
.INSERT. . . SELECT. . .
und ich wiederholen Sie einfach die Anweisung zweimal, einmal für Null-Werte und einmal für die anderen Zeilen.Ich glaube nicht, dass es irgendeine syntax, die die gleiche Funktion auf beiden Plattformen.
Hinweis
Nz()
ist nur verfügbar, wenn die Access-Benutzeroberfläche.Hier sind ein paar Vorschläge, die umgewandelt werden können, um
COALESCE
ziemlich leicht, obwohl die Wiederholung der Spalte ist ein Schmerz:Beispiel 1:
Beispiel 2:
Erstellen Sie eine benutzerdefinierte öffentlichen Funktion in einem Modul.
Fügen Sie in der Fehlerbehandlung, etc., machen Sie Verbesserungen.
Nun, Sie wäre in der Lage zu verwenden, die
COALESCE
Funktion in MS Access und SQL.Und ich denke, Sie tun nicht wollen, schreiben Sie einen parser, verwalten, übersetzungen zwischen Jet-SQL und T-SQL ...
Eine Lösung, die wir entwickelt (ja, wir hatten ein ähnliches problem zu lösen) ist zu definieren, einige 'pseudo-metasprache', die wir in unserer meta-SQL-syntax, und wir haben eine Art übersetzer von dieser meta-Sprache, in Jet-SQL oder T-SQL.
Beispiel:
Die gleiche Strategie verwendet werden könnte, für die Platzhalter und Trennzeichen:
Ich wissen, dass es nicht so schön, aber es ist sehr effizient und sauber. Die wichtigsten Punkte sind: