Последние строки SQL Server

#sql #sql-server #vb.net

#sql #sql-сервер #vb.net

Вопрос:

Я уверен, что это легко, но я много гуглил и искал.

Хорошо, у меня есть таблица БЕЗ дат и т.д. с 100000000000000000 записей.

Я хочу видеть последние записи, т.е.

 Select top 200 * 
from table 
  

НО я хочу видеть последние записи. Есть ли rowidentifier, который я мог бы использовать в таблице?

ie

 select top 200 * 
from table 
order by rowidentifer Desc
  

Спасибо

Комментарии:

1. Нет. В таблице нет порядка.

2. Практически невозможно иметь таблицу со 100 000 000 000 000 000 строк. Если вы это сделаете, у вас должен быть довольно хороший администратор базы данных, с которым вы можете общаться.

3. Да. Завершите BS. даже если бы каждая строка была крошечной в 14 байт, это составило бы 1400 петабайт памяти для таблицы.

4. А максимальный размер базы данных в SQL Server составляет 524,272 петабайт. Минимальный размер строки составляет 9 байт, поэтому это невозможно.

Ответ №1:

Есть ли row.identifier, который я мог бы использовать в таблице, т.е. Установить top 200 * из таблицы order by row.identifer Desc

Как уже указывалось в комментарии, нет. Лучший способ — это идентификация, временная метка или какая-либо другая форма идентификации записи. Вот альтернативный способ EXCEPT получения того, что вам нужно, но план выполнения не самый лучший… Поиграйте с ним и измените по мере необходимости.

      --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)
  

С другой стороны, вы могли бы создать другой Table Variable , который имеет идентификатор и другие столбцы, затем вы могли бы вставить нужные вам записи. Затем вы можете выполнять другие операции с таблицей, например OrderBy , etc…

Что вы могли бы сделать

  ALTER TABLE TABLENAME
 ADD ID INT IDENTITY
  

Это добавит еще один столбец в таблицу «ID» и автоматически присвоит ему идентификатор. Тогда у вас есть идентификатор, который вы можете использовать…

Ответ №2:

Нет, короче говоря, их нет, если у вас нет столбца, выделенного как один (т. е.. ИДЕНТИФИКАТОР, или ПОСЛЕДОВАТЕЛЬНОСТЬ, или что-то подобное). Если бы вы это сделали, вы могли бы получить упорядоченный результат обратно.