HAVIT Knowledge Base

Vývoj webových aplikací, .NET, SQL, návrh
Welcome to HAVIT Knowledge Base Sign in | Join | Help
-
Home Články Forums Obrázky Soubory

SQL

Microsoft SQL Server, Transact-SQL, Business Intelligence, CLR, ...

Rozdíl mezi COALESCE() a ISNULL()

  1. COALESCE() je z ANSI/ISO standardu SQL32, kdežto ISNULL() je jen T-SQL rozšíření (Microsoft SQL Serveru).
  2. ISNULL() má vlastní interpretaci, kdežto COALESCE() je pouze zkrácený zápis pro CASE strukturu a i se tak provádí:
    CASE
    WHEN (expression1 IS NOT NULL) THEN expression1
    ...
    WHEN (expressionN IS NOT NULL) THEN expressionN
    ELSE NULL
    END
  3. Typ výsledku ISNULL() je vždy dle prvního parametru, typ výsledku COALESCE() odpovídá CASE struktuře, tj. pokouší se o maximální záběr ze všech parametrů (SQL Server Books Online: "Returns the highest precedence type from the set of types in result_expressions and the optional else_result_expression.").
    DECLARE @Test char(2)
    SET @Test = NULL
    SELECT ISNULL(@Test, 'abcde'), COALESCE(@Test, 'abcde')
    Např. výše uvedený test vrací 'ab', 'abcde'.
  4. Vzhledem k převodu COALESCE() na CASE oproti vlastnímu provádění je ISNULL() mnohdy rychlejší.
  5. ISNULL() pochopitelně bere pouze dva parametry, kdežto COALESCE() víc.


Published 28. ledna 2007 21:11 by Robert Haken
Filed under:

Comment Notification

If you would like to receive an email when updates are made to this post, please register here

Subscribe to this post's comments using RSS

Comments

 

Martin Knotek said:

ledna 29, 2007 13:17
 

Rudidlo said:

Jsem to zkoušel změřit a výsledky mě samotného překvapily. Předpokládal jsem, že ISNULL je rychlejší.

http://silicon-remarks.blogspot.com/2008/01/to-be-with-null-or-not-to-be-with-null.html

března 28, 2008 13:02
 

Robert Haken said:

No vždyť ano, ISNULL je rychlejší.,

března 28, 2008 13:38
 

Rudidlo said:

Zvláštní je, že někteří autoři tvrdí opak, např.

http://weblogs.sqlteam.com/mladenp/articles/2937.aspx

března 28, 2008 16:13
 

Robert Haken said:

to Rudidlo: No, tam jim vyšla méně výhodně i storka oproti inline dotazu, takže o relevanci takového měření by se dalo úspěšně pochybovat.

března 28, 2008 16:37

What do you think?

(required) 
(optional)
(required) 
Enter the code you see below

Submit