Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server最近的行_Sql_Sql Server_Vb.net - Fatal编程技术网

SQL Server最近的行

SQL Server最近的行,sql,sql-server,vb.net,Sql,Sql Server,Vb.net,我相信这很容易,但我已经在谷歌上搜索了很多 好的,我有一个没有日期等的表,有1000000000000000条记录 我想看看最新的条目,即 Select top 200 * from table 但我想看看最新的参赛作品。是否有可以在表中使用的行标识符 即 谢谢不,简而言之,如果你没有一个专门的专栏(例如,一个身份,一个序列,或者类似的东西),那么就没有了。如果您这样做了,那么您可以得到一个有序的结果 是否有一个row.identifier可用于表格ie set top 200*from

我相信这很容易,但我已经在谷歌上搜索了很多

好的,我有一个没有日期等的表,有1000000000000000条记录

我想看看最新的条目,即

Select top 200 * 
from table 
但我想看看最新的参赛作品。是否有可以在表中使用的行标识符


谢谢

不,简而言之,如果你没有一个专门的专栏(例如,一个身份,一个序列,或者类似的东西),那么就没有了。如果您这样做了,那么您可以得到一个有序的结果

是否有一个row.identifier可用于表格ie set top 200*from table order by row.identifer Desc

如评论中所述,没有。最好的方法是使用标识、时间戳或其他形式的记录标识。这里有一种替代方法,使用
除了
之外,以获得您需要的,但执行计划不是最好的。。。玩转它,并根据需要进行更改

     --testing purposes...
DECLARE @tbl TABLE(FirstName VARCHAR(50))
DECLARE @count INT = 0

WHILE (@count <= 12000) 
BEGIN
    INSERT INTO @tbl(FirstName)
    SELECT
        'RuPaul ' + CAST(@count AS VARCHAR(5))

    SET @count += 1

END

--adjust how many records you would like, example is 200
SELECT * 
FROM @tbl
EXCEPT(SELECT TOP (SELECT COUNT(*) - 200 FROM @tbl) * FROM @tbl)

--faster than above 
DECLARE @tblCount AS INT = (SELECT COUNT(*) FROM @tbl) - 200
SELECT * 
FROM @tbl
EXCEPT(SELECT TOP (@tblCount) * FROM @tbl)

这将向表“ID”中添加另一列,并自动为其指定ID。然后您可以使用标识符…

否。表中没有顺序。几乎不可能有一个包含1000000000000000行的表。如果你这样做了,你应该有一个很好的DBA,你可以和他谈谈。是的。完全学士学位。即使每行只有14个字节,表的存储空间也只有1400 PB,SQL Server中的最大数据库大小是524.272 PB。最小行大小为9字节,因此不可能。
     --testing purposes...
DECLARE @tbl TABLE(FirstName VARCHAR(50))
DECLARE @count INT = 0

WHILE (@count <= 12000) 
BEGIN
    INSERT INTO @tbl(FirstName)
    SELECT
        'RuPaul ' + CAST(@count AS VARCHAR(5))

    SET @count += 1

END

--adjust how many records you would like, example is 200
SELECT * 
FROM @tbl
EXCEPT(SELECT TOP (SELECT COUNT(*) - 200 FROM @tbl) * FROM @tbl)

--faster than above 
DECLARE @tblCount AS INT = (SELECT COUNT(*) FROM @tbl) - 200
SELECT * 
FROM @tbl
EXCEPT(SELECT TOP (@tblCount) * FROM @tbl)
 ALTER TABLE TABLENAME
 ADD ID INT IDENTITY