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

列名のパラメーターを使用して順序付け

    次のようなことができるはずです:

    SELECT *
    FROM
        TableName
    WHERE
        (Forename LIKE '%' + @SearchValue + '%') OR
        (Surname LIKE '%' + @SearchValue + '%') OR
        (@SearchValue = 'ALL')
    ORDER BY 
        CASE @OrderByColumn
        WHEN 1 THEN Forename
        WHEN 2 THEN Surname
        END;
    
    • 1を@OrderByColumnに割り当てます Forenameで並べ替える 。
    • 2を割り当ててSurnameで並べ替えます 。
    • その他...このスキームを任意の数の列に拡張できます。

    ただし、パフォーマンスには注意してください。これらの種類の構成は、クエリオプティマイザが最適な実行プランを見つける機能を妨げる可能性があります。たとえば、Forename インデックスでカバーされている場合でも、クエリはインデックスを順番にトラバースするのではなく、完全な並べ替えを必要とする場合があります。

    その場合、パフォーマンスへの影響に耐えられない場合は、可能な並べ替え順序ごとに個別のバージョンのクエリを用意する必要があり、クライアント側でかなり複雑になります。



    1. RMLユーティリティツールを介したSQLDIAGパフォーマンスデータのレポート| SQLServerのパフォーマンスのトラブルシューティング-7

    2. if(select count(column)from table)> 0 then

    3. sequelizeを使用してローカルノードアプリからherokupostgresqlデータベースに接続できません

    4. SQLServerで日時と日付のみを比較する方法