2017-12-26 6 views
-1

Ich habe IIF(expression , truePart , falsePart) in meiner SQL-Abfrage in MS-Access-2010 verwendet. Ich habe auch einen anderen Operator gefunden NZ(expression,falsePart).IIF und Nz-Operator in Zugriff sql

Ich möchte wissen, welcher Operator ist schneller in Bezug auf Zeit und Raum Komplexität und wie?

Beispiel Wenn ich Datensätze aus einer Tabelle mit 10k-Datensätzen abrufen möchte. welches vom oben genannten Operator ist besser zu benutzen?

+3

Sie dienen verschiedenen Zwecken, also führen Sie Tests basierend auf Ihren tatsächlichen Daten aus. Außerdem ist Nz nur in Access VBA vorhanden. – Gustav

Antwort

1

Die Ausführung von jedem wird nahezu identisch sein, außer in außergewöhnlich großen Iterationen.

In Abfragen - es gibt ein paar Probleme, die ich denke, die auffallen. Für mich sind das der zurückgegebene Datentyp und der native Status der Funktion.

Sofortige Wenn der Datentyp beibehalten wird. Nicht nur das - Sie können es verwenden, um den Datentyp zu erzwingen. Wenn Sie eine Ganzzahl zurück oder ein Datum möchten, können Sie das als Ihren zurückgebenden Parameter übergeben. Nz gibt dir die Variante (Text/String), die es zurückgeben möchte.

Das andere Problem, das ich erwähnte, ist Verfügbarkeit. Das Immediate If wird von Jets Ausdrucksdienst implementiert. Die vollständige Access VBA-Bibliothek muss nicht geladen werden, um sie verfügbar zu machen.

Mit anderen Worten - wenn Sie eine Abfrage erstellen, wie

SELECT * FROM TableName WHERE IIF(FieldName Is Null, 0, FieldName) = 0 

dann können Sie diese Abfrage ausführen von Code externen Bibliotheken für den Zugriff auf (keine Access-Verbindung erfordern).

Jet wird die Funktion auswerten. (Nicht, dass dies eine besonders gute Frage ist - es ist wirklich schrecklich mit beiden Funktionen).

Die äquivalente

SELECT * FROM TableName WHERE Nz(FieldName, 0) = 0 

beruht auf der Tatsache, dass Nz Mitglied des Access Application Objektmodell ist. Es erfordert unbedingt, dass es Access ist, der die Abfrage ausführt. Nicht unbedingt ein gemeinsames Problem, sondern eine Überlegung.