我有一个带有AutoIncrement列的数据表。如何在不添加新行的情况下获取列的下一个增量(-1,-2,-3,...)?
答案 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来获取它。