sql >> Databasteknik >  >> RDS >> Sqlserver

isnull vs är null

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

motsvarar

where name is not null and name <> '' 

vilket i sin tur motsvarar

where name <> ''

(om namnet IS NULL det slutliga uttrycket skulle utvärderas till okänt och raden returneras inte)

Användningen av ISNULL mönster kommer att resultera i en skanning och är mindre effektivt som kan ses i nedanstående test.

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 <> '' */

Vilket borde ge dig den genomförandeplan du behöver.



  1. Få lagrade procedurparametrar med antingen C# eller SQL?

  2. SQL Server-markörtyper - KEYSET-markör | SQL Server Tutorial / TSQL Tutorial

  3. Hur man aktiverar XA Oracle 11g

  4. Använd OBJECT_NAME() för att hämta ett objekts namn från dess object_id i SQL Server