30

Visual StudioDataSetDesignerで作成されたクエリまたはストアドプロシージャの「OrderBy」句でパラメーターを使用したいと思います。

例:

  FROM TableName
 WHERE (Forename LIKE '%' + @SearchValue + '%') OR
       (Surname LIKE '%' + @SearchValue + '%') OR
       (@SearchValue = 'ALL')
ORDER BY @OrderByColumn

このエラーが表示されます:

Variables are only allowed when ordering by an expression referencing 
a column name.
4

1 に答える 1

57

あなたはこのようなことをすることができるはずです:

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インデックスでカバーされている場合でも、クエリはインデックスを順番にトラバースするのではなく、完全な並べ替えを必要とする場合があります。

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

于 2012-12-12T18:29:19.890 に答える