我得到“ORDER BY 子句在 View 、内联函数、派生表、子查询和公用表表达式中无效,除非还指定了 TOP 或 FOR XML。”以下代码出错。我最初有两个表:ADSAREAS 和 CATEGORIES。当我删除 CATEGORIES 表时,我开始收到此错误。
Select Case SIDX
Case "ID" : SQLCONT1 = " AdsAreasID"
Case "Page" : SQLCONT1 = " AdsAreasName"
Case Else : SQLCONT1 = " AdsAreasID"
End Select
Select Case SORD
Case "asc" : SQLCONT2 = " ASC"
Case "desc" : SQLCONT2 = " DESC"
Case Else : SQLCONT2 = " ASC"
End Select
''# search feature --->
Select Case SEARCHFIELD
Case "ID" : SQLSFIELD = "AND AdsAreasID"
Case "Ads Areas" : SQLSFIELD = "AND AdsAreasName"
Case Else : SQLSFIELD = ""
End Select
Select Case SEARCHOPER
Case "eq" : SQLSOPER = " = " & SEARCHSTRING
Case "ne" : SQLSOPER = " <> " & SEARCHSTRING
Case "lt" : SQLSOPER = " <" & SEARCHSTRING
Case "le" : SQLSOPER = " <= " & SEARCHSTRING
Case "gt" : SQLSOPER = " >" & SEARCHSTRING
Case "ge" : SQLSOPER = " >= " & SEARCHSTRING
Case "bw" : SQLSOPER = " LIKE '" & SEARCHSTRING & "%' "
Case "ew" : SQLSOPER = " LIKE '%" & SEARCHSTRING & "' "
Case "cn" : SQLSOPER = " LIKE '%" & SEARCHSTRING & "%' "
Case Else : SQLSOPER = ""
End Select
''# search feature --->
SQL = "SELECT * FROM ( SELECT A.AdsAreasID, A.AdsAreasName, ROW_NUMBER() OVER (ORDER BY A.AdsAreasID) As Row"
SQL = SQL & " FROM ADSAREAS A"
SQL = SQL & " WHERE Row > ("& RecordsPageSize - RecordsPerPage &") AND Row <= ("& RecordsPageSize &") ORDER BY" & SQLCONT1 & SQLCONT2
Set objXML = objConn.Execute(SQL)
最佳答案
您在重写时将 ORDER BY 子句移至内部查询。在 WHERE 子句后添加括号(和标识符),以便 ORDER BY 适用于外部 SELECT。
SQL = "SELECT * FROM ( SELECT A.AdsAreasID, A.AdsAreasName, ROW_NUMBER() OVER (ORDER BY A.AdsAreasID) As Row"
SQL = SQL & " FROM ADSAREAS A"
SQL = SQL & " WHERE Row > ("& RecordsPageSize - RecordsPerPage &") AND Row <= ("& RecordsPageSize &")) inner ORDER BY" & SQLCONT1 & SQLCONT2
关于sql-server - 除非还指定了 TOP 或 FOR XML,否则 ORDER BY 子句无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2454195/