Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

isnull vs ist null

where isnull(name,'') <> ''

entspricht

where name is not null and name <> '' 

was wiederum äquivalent zu

ist
where name <> ''

(wenn name IS NULL dieser abschließende Ausdruck würde als unbekannt ausgewertet und die Zeile nicht zurückgegeben)

Die Verwendung des ISNULL Muster führt zu einem Scan und ist weniger effizient, wie im folgenden Test zu sehen ist.

SELECT ca.[name],
       [number],
       [type],
       [low],
       [high],
       [status]
INTO   TestTable
FROM   [master].[dbo].[spt_values]
       CROSS APPLY (SELECT [name]
                    UNION ALL
                    SELECT ''
                    UNION ALL
                    SELECT NULL) ca 


CREATE NONCLUSTERED INDEX IX_TestTable ON dbo.TestTable(name)

GO


SELECT name FROM TestTable WHERE isnull(name,'') <> ''

SELECT name FROM TestTable WHERE name is not null and name <> ''
/*Can be simplified to just WHERE name <> '' */

Das sollte Ihnen den Ausführungsplan geben, den Sie brauchen.