将联合查询作为派生表包装在另一个查询中,可以使用top子句。
SELECT TOP 100 * FROM (
SELECT * FROM table where field = 'entry'
UNION ALL
SELECT * FROM table where field = 'entry#'
) sortedresults
那时候你走对了。向排序结果的每个子集添加一个已定义的列,然后可以使用该列保持排序顺序。
WITH SearchResult AS
(SELECT *, ROW_NUMBER() OVER (ORDER BY QueryNum) as RowNum FROM
(SELECT *, 1 as QueryNum FROM KeywordTable WHERE field = 'Keyword'
UNION ALL
SELECT *, 2 from KeywordTable WHERE field = 'Keyword#'
) SortedResults
)
SELECT * from SearchResults WHERE RowNum BETWEEN 4 and 10
重要的是,您还可以使用关键字以外的其他内容对每个子查询进行排序,以便它们在运行期间保持相同的顺序(并作为行数函数的辅助排序)。例如:假设你有k1,k2,k3,k4,k5-如果你选择像k%这样的*Where关键字,你可能会得到k1,k2,k3,k4,k5一次,k5,k4,k3,k2,k1下一次(sql不保证返回顺序,它可以不同)。那会使你的寻呼中断。