Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

isnull vs is null

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

jest odpowiednikiem

where name is not null and name <> '' 

co z kolei jest równoważne

where name <> ''

(jeśli nazwa IS NULL że końcowe wyrażenie będzie miało wartość nieznane, a wiersz nie zostanie zwrócony)

Użycie ISNULL wzór spowoduje skanowanie i będzie mniej wydajny, jak widać w poniższym teście.

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

Który powinien dać ci plan wykonania, którego potrzebujesz.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwróć nazwę bieżącej stacji roboczej, która jest połączona z programem SQL Server (T-SQL)

  2. SQL Server 2008:Dziwny błąd w procedurze składowanej

  3. SQL Server 2005 Uzyskaj pierwszą i ostatnią datę z dowolnego miesiąca w dowolnym roku

  4. OBJECTPROPERTY() vs OBJECTPROPERTYEX() w SQL Server:jaka jest różnica?

  5. Używanie aliasów w klauzuli Where lub alternatywnej opcji?