alternativa di coalescenza in Access SQL

In T-SQL, puoi fare questo:

SELECT ProductId, COALESCE(Price, 0) FROM Products 

Come fai la stessa cosa in Access SQL? Vedo esempi per farlo con Nz in VBA, ma sto cercando l’equivalente SQL.

Grazie.

Access supporta la funzione Nz e consente di utilizzarlo in una query. Nota che Nz è uguale alla funzione ISNULL di T-SQL. Non può prendere un numero arbitrario di parametri come può fare COALESCE.

Se si trova in una query di accesso, puoi provare questo:

 "Price = IIf([Price] Is Null,0,[Price])" 

Sembra che io possa usare solo:

 SELECT ProductId, Nz(Price, 0) FROM Products 

Sembra funzionare bene.

L’uso di Iif(Price is null, 0, Price) dovrebbe darti la migliore prestazione (vedi i consigli sulle prestazioni di Allen Browne ). Tuttavia, SQL Server Coalesce() ha il grande vantaggio rispetto a Iif() e Nz() che può gestire diversi parametri in una cascata. Così ho creato questo veloce equivalente VBA:

 Function Coalesce(ParamArray varValues()) As Variant 'returns the first non null value, similar to SQL Server Coalesce() function 'Patrick Honorez --- www.idevlop.com Dim i As Integer Coalesce = Null For i = LBound(varValues) To UBound(varValues) If Not IsNull(varValues(i)) Then Coalesce = varValues(i) Exit Function End If Next End Function 

L’utilizzo di IsNull() , Nz() e le funzioni di conversione dei dati sono funzioni VBA integrate e rallenteranno le query solo nelle versioni precedenti al 2003. Per quanto riguarda la codifica dei dati, utilizzare CCur() per garantire il tipo di dati, ma solo se hai bisogno di fare forti confronti o semplicemente imposta la proprietà format su Currency sulla colonna. È l’istruzione IF che rallenta di più le cose, poiché aggiunge un’altra funzione alla tua routine

usando questa soluzione: Nz([Price], CCur(0))

l’unica volta che CCur() verrà eseguita è quando Price is Null, quindi nel complesso questo è probabilmente il più veloce.

Il punto è che il minor numero di funzioni totali utilizzate , più velocemente le query verranno eseguite.

La funzione COALESCE o NULLIF è lo standard utilizzato su SQL Server per una buona migrazione all’accesso. ISNULL o IIF o SCEGLI sono funzioni non standard.