-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 是其中一个表中的一列,@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 回答