【发布时间】:2015-12-03 22:08:37
【问题描述】:
我想为“产品”获取一个新的行 ID,为此我使用 MAX SQL 命令如下(该命令在插入新记录按钮单击事件中):
SqlCommand cmd = new SqlCommand("Select ISNULL(MAX(id)+1,0) from products", SqlCon);
问题是当有 ID 为 10、11、12 的行(12 是 MAX)并且我删除 id 12 记录时,当新的 id 行为 13 时,我得到 MAX+1 id 12(“id”字段为 PK身份增量为 1)。 我可以用其他方式吗?
示例:
id prodect
-- -------
1 dog
2 cat
3 mouse
4 elefant
当我删除第 4 行时,我得到 MAX(id)+1 = 4,我想得到 5,因为这是下一行 id。
【问题讨论】:
-
你想解决什么问题,你认为解决方案是“猜猜 products 表中的下一个身份是什么”
-
SQLServer?那为什么不使用标识列呢?
-
这就是为什么使用 MAX+1 是一个坏的想法 - 它可能导致将相同的 ID 分配给不同的记录。只是不要这样做
-
我正在尝试获取在按钮单击事件中添加的新行 ID。现在我按 MAX(id)+1 来做。问题是当我删除最后一行时,我得到与删除行相同的 id,而新行得到 id+1。我该怎么办?
-
您无法猜测下一个数字是多少,因为多个用户可以同时添加记录,尤其是在 ASP.NET 应用程序中。您可以通过在
INSERT语句中使用OUTPUT子句来返回新 ID 的值
标签: c# asp.net sql-server