sql >> Databáze >  >> RDS >> Sqlserver

SQL Server 2008, různé klauzule WHERE s jedním dotazem

Nemusíte, můžete to obejít tím, že uděláte něco jako

SELECT  *
FROM    [Query]
WHERE   (@Parameter = 1 AND Column1 = 8)
OR      (@Parameter = 2 AND Column2 = 8)
OR      (@Parameter = 3 AND Column3 = 8)

To, že něco umíte, však neznamená, že byste měli. Méně podrobný SQL neznamená lepší výkon, takže použijte něco jako:

IF @Parameter = 1
    BEGIN
        SELECT  *
        FROM    [Query]
        WHERE   Column1 = 8
    END
ELSE IF @Parameter = 2
    BEGIN
        SELECT  *
        FROM    [Query]
        WHERE   Column2 = 8
    END
ELSE IF @Parameter = 3
    BEGIN
        SELECT  *
        FROM    [Query]
        WHERE   Column3 = 8
    END

zatímco ekvivalent prvního dotazu by měl vést k lepšímu výkonu, protože bude lépe optimalizován.



  1. Jak vybrat DISTINCT řádky, aniž by bylo vybráno pole ORDER BY

  2. V klauzuli ON CONFLICT použijte více konfliktů_cíl

  3. Proč se naše dotazy zasekávají na stavu Zápis do sítě v MySql?

  4. Sečtěte po měsíci a uveďte měsíce do sloupců