Нет, нет предопределенной функции в SQL Server, который будет возвращать «последний строка "таблицы.
По определению таблица представляет собой неупорядоченный набор строк. Представьте, что вы бросаете кучу мрамора в сумку. Теперь откройте сумку и спросите кого-нибудь еще, какой мрамор вышел первым или последним. Теперь бросьте их всех на пол, и когда кто-то еще входит в комнату, спросите их, кто попал в пол первым или последним. Вы не можете этого сделать, потому что нет дополнительной информации, указывающей на порядок, в котором они упали.
То же самое верно для таблицы в SQL Server. Если вы не добавите столбец IDENTITY или столбец datetime или триггер или не используете внешние функции, такие как отслеживание изменений, CDC, аудит и т. Д., SQL Server не сможет сказать вам, какая строка была вставлена последней. Вы можете подумать что просто выбирая из таблицы без заказа по предложению выглядит, как будто он возвращает данные в правильном порядке, это чистое совпадение. Вот пример:
CREATE TABLE dbo.floobat
(
ID INT PRIMARY KEY,
n VARCHAR(16),
x CHAR(4000) NOT NULL DEFAULT ''
);
INSERT dbo.floobat(ID,n) VALUES(1,'Sparky');
INSERT dbo.floobat(ID,n) VALUES(2,'Aaron');
INSERT dbo.floobat(ID,n) VALUES(3,'Norbert'); -- <-- inserted last
SELECT ID, n FROM dbo.floobat;
Хорошо, так что по умолчанию это похоже на все.Результаты:
ID n
-- -------
1 Sparky
2 Aaron
3 Norbert -- < yes, this is right
Однако, давайте внести изменения в таблицу, что ваше приложение или что-то еще полагается на выше упорядоченности не будет иметь ни малейшего представления о том:
CREATE NONCLUSTERED INDEX x ON dbo.floobat(n);
SELECT ID, n FROM dbo.floobat;
Ой-ой! Результаты:
ID n
-- -------
2 Aaron
3 Norbert
1 Sparky -- < oops, this is no longer right
Вы должны помнить: если вы не включают в себя предложения ORDER BY, вы говорить SQL Server, что вы не заботитесь о порядке. Таким образом, он найдет наиболее эффективный способ вернуть данные, что может привести к различному упорядоченному порядку. Добавление вышеприведенного индекса дало SQL Server лучший путь доступа к извлечению данных. Он все еще использовал сканирование, но этот индекс был более тонким, чем кластеризованный индекс (который мог бы вставлять только две строки на странице).
Даже без индекса вы, вероятно, не получите ожидаемых результатов, так как он запутан тем, что ваш столбец Cust_ID
не вставлен в порядке возрастания. Поэтому, если вы вставляете 5
и 2
, то выбор без ORDER BY на самом деле приведет к 2
, а затем 5
(при условии отсутствия лучшего индекса).
Другие вещи, кроме создания (или отбрасывания, изменения или перестройки), могут привести к тому же изменению поведения заказа. Применить пакет обновления, CU или исправление; очистка кэша процедур; используя различные опции RECOMPILE; обновление статистики; перезапуск сервера; добавление или отключение флага трассировки; изменение параметров опций сервера; перемещение базы данных на другой сервер; и т. д. и т. д.
Итак, если вы хотите отследить эту информацию, вам нужно будет как-то добавить ее в себя, как рассмотрели несколько других ответов.
Почему бы вам не добавить временную метку? –
Не существует метода 'Last()' в sql – megawac
Является ли ваш CustID элементом идентификации? –