【发布时间】:2018-12-06 19:23:27
【问题描述】:
我必须在 UI 网格中显示数据,并从 SQL Server 2014 中的两个不同表中选择数据。
数据可以按来自 UI 代码的任何列进行排序,并且可以按双向(ASC/DESC)进行排序。 UI 代码也传递方向。
在我当前的实现中,我们使用如下 CTE -
;WITH cte AS
(SELECT ED.JobExecutionID
, ED.RowNumber
, ED.ErrorMessage
, ED.RowData
, CASE
WHEN @SortKey = 'RowNumber' AND @SortDirection = 'Ascending' THEN ROW_NUMBER() OVER (ORDER BY ED.RowNumber ASC)
WHEN @SortKey = 'RowNumber' AND @SortDirection = 'Descending' THEN ROW_NUMBER() OVER (ORDER BY ED.RowNumber DESC)
WHEN @SortKey = 'ErrorMessage' AND @SortDirection = 'Ascending' THEN ROW_NUMBER() OVER (ORDER BY ED.ErrorMessage ASC)
WHEN @SortKey = 'ErrorMessage' AND @SortDirection = 'Descending' THEN ROW_NUMBER() OVER (ORDER BY ED.ErrorMessage DESC)
WHEN @SortKey = 'RowData' AND @SortDirection = 'Ascending' THEN ROW_NUMBER() OVER (ORDER BY ED.RowData ASC)
WHEN @SortKey = 'RowData' AND @SortDirection = 'Descending' THEN ROW_NUMBER() OVER (ORDER BY ED.RowData DESC)
ELSE ROW_NUMBER() OVER (ORDER BY ED.RowNumber ASC)
END AS SortRowNumber
FROM ExceptionDetails ED
JOIN ExecutionDetails IED ON IED.JobExecutionID = ED.JobExecutionID
WHERE ED.JobExecutionID = @JobExecutionId
),
RESULTS AS
(SELECT * FROM cte)
SELECT JobExecutionID
, RowNumber
, ErrorMessage
, RowData
, SortRowNumber
FROM RESULTS
WHERE SortRowNumber BETWEEN @StartRowNumber AND @EndRrowNumber
ORDER BY SortRowNumber
我想摆脱 CTE 任何帮助将不胜感激。
【问题讨论】:
-
为什么要摆脱 CTE?
-
我们没有更好的选择吗?特别是我认为我也可以动态传递列名,但不能动态传递方向。
-
这被标记为重复引用,但我认为使用 sp_executesql 有更好的解决方案
标签: sql sql-server common-table-expression