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