sql >> データベース >  >> RDS >> Sqlserver

SQL Server 2008、1つのクエリで異なるWHERE句

    あなたはそうする必要はありません、あなたは次のようなことをすることによってそれを回避することができます

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

    しかし、あなたが何かをすることができるという理由だけで、あなたがすべきであるという意味ではありません。冗長性の低いSQLはパフォーマンスの向上を意味しないため、次のようなものを使用します。

    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
    

    最初のクエリと同等であると、最適化が向上するため、パフォーマンスが向上するはずです。



    1. ORA-00060:リソースの待機中にデッドロックが検出されました

    2. オプティマイザーがバッファープールの知識を使用しない理由

    3. MysqlクエリでPHP関数strtotimeを使用できますか

    4. tnsname.oraなしでOracleに接続します