2011-01-11 76 views
3

我怎樣才能得到最後插入的行當在表中沒有Uniqueidentifier or identity列。如何獲取最後插入的行在SQL服務器

我在等你的好主意。

+1

雖然這只是我的看法,但我相信每個表都應該有一個唯一的ID,即使它沒有被應用程序本身使用。這樣做會解決你的問題 – saret 2011-01-11 12:38:10

+1

除非表中沒有索引,否則你不能。我可以問爲什麼你想要最後的記錄? – 2011-01-11 12:39:08

+1

@saret在使用Uniqueidentifier時仍不可能獲取最後一條記錄 – 2011-01-11 12:40:21

回答

4

您需要某種方式來識別行的排序來確定。類似於「創建日期」或IDENTITY列。

2

你不能。一個表由一組無序的行*組成。例如,如果您需要了解某行插入時的情況,則需要將該信息添加到表定義中(通過添加一個新列)並適當填充。

*即使面對聚集索引,總是更健康將表視爲無序的一組行。聚集索引是有用的,但它不能保證任何特定的物理順序(正如馬丁評論這個答案)

+0

單頁內的行不一定按聚簇索引排序,行偏移列表是但偏移本身可能無序。即如果一個完整的頁面有鍵值爲'1,2,3,5,6'的行,然後刪除'1'並且插入了'4',那麼它將不會重新組織整個頁面,它將僅僅粘貼'4',其中` 1`並更新行偏移列表。 – 2011-01-11 13:19:01

0

不要相信你可以。你需要一些標識符來提取數據。 ID,DateTime ..任何將永遠不同於其他人的東西。

2

如果你想從沒有uniqueIdentifier或identity的表中得到最後一行,那麼你可以使用插入觸發器。

-1
DECLARE @IDs TABLE(id int) 

insert into TableName(TableID, TableRowValue) 
output inserted.TableID into @IDs 
values(857, 'Test'); 

- 插入的身份將是@IDs表變量

0
如果插入的存儲過程,你應該使用SELECT SCOPE_IDENTITY()將返回在當前會話中創建的最後一個標識值

,但它也會將其限制到您當前的範圍。 通過這種用法,您不會得到可能由觸發器引起的上次插入的身份。

請記住,如果您將結果用於插入操作在相同或被調用的過程中。