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

SQLは、変数がnullでない場合にのみフィルターを追加します

    要件を次のように翻訳できます:

    SELECT  route_id [ROUTE_ID]
    FROM route_master(NOLOCK)
    WHERE  route_ou = 2
    AND   (@l_s_query is null OR route_query = @l_s_query)
    AND   lang_id  = 1
    OPTION (RECOMPILE)
    

    OPTION (RECOMPILE) オプションですが、トピック T‑SQLの動的検索条件

    またはCOALESCE() ORを避けるため :

    WHERE  route_ou = 2
    AND   COALESCE(@l_s_query,route_query) = route_query 
    AND   lang_id  = 1
    

    注: @jarlhが言ったように、route_query null許容型の場合、null比較のためにいくつかの問題が発生する可能性があるため、最初のクエリを使用することをお勧めします。

    このもう1つのオプションは、UNION ALLを使用した2つの個別のクエリです。 、条件ごとに1つ-

    SELECT .. FROM .. 
    WHERE @l_s_query IS NULL
    UNION ALL
    SELECT .. FROM .. 
    WHERE @l_s_query = route_query
    

    パフォーマンスの観点から、最後の1つだけがインデックスを使用し、最初の1つが最速になると思いますが、インデックスのデパン、テーブルのサイズなどが変わる可能性があります。



    1. JDBC接続プールを使用していますか?

    2. 売り手と買い手を一致させるSQLクエリ

    3. ORはSQLServerのCASEステートメントではサポートされていません

    4. NPM Oracle:BLOBの挿入