Не, в SQL Server няма предварително дефинирана функция, която да върне „последния ред“ на таблица.
По дефиниция таблицата е неподреден набор от редове. Представете си, че хвърляте куп топчета в торба. Сега отворете чантата и попитайте някой друг кой мрамор е влязъл първи или последен. Сега ги хвърлете всички на пода и когато някой друг влезе в стаята, попитайте го кой удари пода пръв или последен. Не можете да го направите, защото няма допълнителна информация, която да показва нещо за реда, в който са паднали.
Същото важи и за таблица в SQL Server. Освен ако не добавите колона IDENTITY, колона за дата и час, или тригер, или използвате външна функционалност като проследяване на промените, 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 опции; актуализиране на статистика; рестартиране на сървъра; добавяне или дезактивиране на флаг за проследяване; промяна на опции за сървърни опции; преместване на базата данни на друг сървър; и т.н. и т.н.
Така че, ако искате да проследите тази информация, ще трябва да я добавите сами по някакъв начин, както се споменава в няколко от другите отговори.