获取datatable列的下一个自动增量值?

时间:2009-06-18 17:16:11

标签: .net

我有一个带有AutoIncrement列的数据表。如何在不添加新行的情况下获取列的下一个增量(-1,-2,-3,...)?

7 个答案:

答案 0 :(得分:7)

我得到了问题的解决方案(不是解决方法):

从SQLServer获取下一个自动增量值:

SELECT IDENT_CURRENT('table_name'); -- This will fetch the present auto-increment value.

因此,

SELECT IDENT_CURRENT('table_name')+1; -- Next auto-increment value.

如果从具有标识的表中删除行并且键不连续,则不会中断。

希望有所帮助。

答案 1 :(得分:6)

如果它适合您的设计,您始终可以创建新行(datatable.newrow),它已经分配了nextId。它现在已经浪费了但是在你AcceptChanges之前,行没有提交到表中。

答案 2 :(得分:1)

您可以在针对DataTables的Select方法中使用MAX函数。

类似的东西(语法可能不完全正确):

DataRow row = dt.Select("MAX(id)")[0];
int nextId = row["id"] + 1;

MSDN有一个页面,其中包含您可以使用的所有表达式。 DataColumn..::.Expression Property

答案 3 :(得分:1)

  

我有一个数据表   AutoIncrement列。

您是否拥有带有AI列的数据表,或带有AI列的SQL数据库?如果它是具有该列的SQL db,则无法获取下一个值,因为您的DataTable已断开连接。否则你必须等到插入并使用@@ IDENTITY或类似功能。

答案 4 :(得分:0)

如果您使用的是SQL Server,则可以执行以下操作:

SELECT cast(last_value as integer)+cast(increment_value as integer) 
FROM sys.identity_columns 
WHERE object_id=(SELECT id FROM sys.sysobjects WHERE name='PACLogErros')
AND name='ERRCod'

答案 5 :(得分:0)

最好的方法是使用Andrew提到的@@ IDENTITY,因为我们无法推断SQL计算下一个身份的算法,如果您考虑多个人更新数据库,您计算的身份值将不相同当您尝试将行保存到数据库时

答案 6 :(得分:-2)

由于自动增量值始终是该列中的最大值,因此您可以使用max(列名称)+1来获取它。