-1

私はこれをあまりにも長い間見つめてきましたが、どこが間違っていたのかわかりません。

「ExtractedText」が人が検索している単語と一致する一連のデータを返す必要があるストアド プロシージャがあります。

Select @Command = 'select DISTINCT CaseFileEvents.InvestigatorID,convert(nvarchar,EventDate,111) as ''EventDate'',EventTime,EventDesc,TaskID,Privileged,Private,Email,HasAttachments,FName,LName, FName + '' '' + LName as Name ,CaseFileEvents.FileID,CaseFiles.FileName,ItemEntryGradeID, EventDescPlainText
                from CaseFileEvents
                join ......

                WHERE '+ @FilterField +' LIKE ''%' + @FilterQuery + '%'' ORDER BY ' + @SortName + ' ' + @SortOrder + ''; this area seems to bug out

@FilterField はテーブルの 1 つの列で、@FilterQuery はユーザーが入力した検索対象の単語です。@SortName は、ソートされる名前です。

コマンド例: @FilterField = "ExtractedText"、@FilterQuery="something"、@SortName="EventID"、@SortOrder="desc"

これはエラーです:

メッセージ 156、レベル 15、状態 1、行 10
キーワード「ORDER」付近の構文が正しくありません。

完全なコマンド:

WHERE ExtractedText LIKE '%add%' ORDER BY EventID desc;
4

2 に答える 2

1

変数で注文することはできません。動的 SQL を使用する必要があります。

SELECT
     *
FROM
     My_Table
WHERE
     Whatever = @something
ORDER BY
     CASE @sort_order
          WHEN 'ASC' THEN
               CASE @order_by
                    WHEN 'surname' THEN surname
                    WHEN 'forename' THEN forename
                    WHEN 'fullname' THEN fullname
                    ELSE surname
               END
          ELSE '1'
     END ASC,
     CASE @sort_order
          WHEN 'DESC' THEN
               CASE @order_by
                    WHEN 'surname' THEN surname
                    WHEN 'forename' THEN forename
                    WHEN 'fullname' THEN fullname
                    ELSE surname
               END
          ELSE '1'
     END DESC

この投稿を見てください:

SQL Server の並べ替え順序を変数に格納できますか?

于 2012-10-26T00:39:18.343 に答える
0

うまくいかなかったのは、行方不明 WHERE EventID = convert(nvarcahr,@EventID) で「DISTINCT」を取り出しただけだからです

于 2012-10-26T14:32:06.983 に答える