Welcome to Sign in | Help

Re: degradare performante?

  •  05-23-2008, 9:43 AM

    Re: degradare performante?

    Andrei,

    Expresia "ISNULL(ID_AnUniv, -1) = CASE WHEN ISNULL(@ID_AnUniv, -1) = -1 THEN ISNULL(ID_AnUniv, -1) ELSE ISNULL(@ID_AnUniv, -1)"
    nu este identică cu expresia "coalesce(ID_AnUniv, -1) = coalesce(@ID_AnUniv,ID_AnUniv, -1)" atunci când ID_AnUniv are o valoare oarecare (de exemplu 7), iar @ID_AnUniv este -1. Acest lucru se poate testa astfel:

    SELECT a,b,
    CASE WHEN ISNULL(a,-1)=CASE WHEN ISNULL(b,-1)=-1 THEN ISNULL(a,-1) ELSE ISNULL(b,-1) END THEN 'true' ELSE 'false' END as Expr1,
    CASE WHEN COALESCE(a,-1)=COALESCE(b,a,-1) THEN 'true' ELSE 'false' END as Expr2,
    CASE WHEN COALESCE(a,-1)=COALESCE(nullif(b,-1),a,-1) THEN 'true' ELSE 'false' END as Expr3
    FROM (
        SELECT NULL A, NULL B
        UNION SELECT NULL, -1
        UNION SELECT NULL, 1
        UNION SELECT -1, NULL
        UNION SELECT -1, -1
        UNION SELECT -1, 1
        UNION SELECT 1, NULL
        UNION SELECT 1, -1
        UNION SELECT 1, 1
        UNION SELECT 2, 1
    ) x

    O expresie simplificată care ar fi identică cu prima expresie este: "coalesce(ID_AnUniv, -1) = coalesce(nullif(@ID_AnUniv,-1),ID_AnUniv, -1)"
    Şi asta presupunând că ID_AnUniv şi @ID_AnUniv sunt de tip int, pt că dacă tipuri diferite, COALESCE se comportă diferit de ISNULL; vezi: http://databases.aspfaq.com/database/coalesce-vs-isnull-sql.html

    Răzvan
View Complete Thread
Powered by Community Server (Commercial Edition), by Telligent Systems