我有一个没有添加标识列的表。我并不真的需要一个用于任何特定目的。
我有821行,我做了500多次测试。现在我需要检查这500个文件,我正在寻找一种简单的方法来
从表中选择*,其中row_number> 821
我已经尝试过row_number()但是我不能让它们被命令,我需要返回821以上的所有行。
答案 0 :(得分:5)
一张桌子是一排无序的行。您无法识别插入的前820行,除非您有一些列来标识插入顺序(例如,可信的IDENTITY或datetime列)。否则你在地板上扔了一堆弹珠,并要求第一个走进房间的人识别掉掉的前820弹珠。
这是一个非常简单的例子,它表明输出顺序无法预测,当然不能依赖于FIFO(并且还显示了HABO的“解决方案”中断的情况):
CREATE TABLE dbo.foo(id INT, x CHAR(1));
CREATE CLUSTERED INDEX x ON dbo.foo(x);
-- or CREATE INDEX x ON dbo.foo(x, id); -- doesn't require a clustered index to prove
INSERT dbo.foo VALUES(1,'z');
INSERT dbo.foo VALUES(2,'y');
INSERT dbo.foo VALUES(3,'x');
INSERT dbo.foo VALUES(4,'w');
INSERT dbo.foo VALUES(5,'v');
INSERT dbo.foo VALUES(6,'u');
INSERT dbo.foo VALUES(7,'t');
INSERT dbo.foo VALUES(8,'s');
SELECT TOP (5) id, x, ROW_NUMBER() OVER (ORDER BY (SELECT NULL))
FROM dbo.foo;
SELECT * FROM dbo.foo;
结果:
---- ---- ----
8 s 1
7 t 2
6 u 3
5 v 4
4 w 5
---- ----
8 s
7 t
6 u
5 v
4 w
3 x
2 y
1 z
答案 1 :(得分:2)
以下是可能有用的黑客攻击,但 NOT 是一个通用的解决方案:
Row_Number() over (order by (select NULL)) as UntrustworthyRowNumber