我看到非常奇怪的构造行为,如
SELECT ... ORDER BY ... OFFSET ... ROWS FETCH NEXT ... ROWS ONLY
我做了一个简单的例子来显示它(SQL Server版本:2012 - 11.0.5058.0(X64)):
CREATE TABLE #temp( c1 int NOT NULL, c2 varchar(MAX) NULL)
INSERT INTO #temp (c1,c2) VALUES (1,'test1')
INSERT INTO #temp (c1,c2) VALUES (2,NULL)
INSERT INTO #temp (c1,c2) VALUES (3,'test3')
INSERT INTO #temp (c1,c2) VALUES (4,NULL)
INSERT INTO #temp (c1,c2) VALUES (5,NULL)
首先查询:
select * from #temp
ORDER BY c2 DESC
结果还可以:
3 test3
1 test1
2 NULL
4 NULL
5 NULL
第二次查询:
select * from #temp
ORDER BY c2 DESC
OFFSET 0 ROWS FETCH NEXT 3 ROWS ONLY
结果有另一种排序:
3 test3
1 test1
4 NULL
最后查询:
select * from #temp
ORDER BY c2 DESC
OFFSET 3 ROWS FETCH NEXT 3 ROWS ONLY
结果是非常奇怪的,在我看来是无效的(我需要获得两个以前的结果中没有包含的记录,而是我得到id = 4次的记录):
4 NULL
2 NULL
有谁可以解释为什么SQL服务器如此奇怪?
答案 0 :(得分:1)
在这种情况下使用唯一键列:
select * from #temp
ORDER BY c2, c1 DESC
OFFSET 0 ROWS FETCH NEXT 3 ROWS ONLY
从未面临订购问题。