1

首先,对不起我的英语。我试图找到这个问题的答案,但我真的不知道如何表达自己。

如果它是重复的,请关闭它并让我知道答案。

我有一个表格来存储客户购物车中每一项的数据。结构是:

表 - tmpShoppingCartItem

tmpShoppingCart_ID  int FK from tmpShoppingCart
ID                  int PK, Ident 1,1
StoreSKU_ID         int FK from StoreSku
Quantity            int 
Enabled             bit 

该列ID是种子 = 1 的标识。但是当我开始插入数据时,它看起来像:

tmpShoppingCart_ID        ID          ....
1                         1
1                         2
1                         3
1                         4

直到这里,它还可以,但是当它是一个新的购物车时,它看起来像:

tmpShoppingCart_ID        ID          ....
2                         5
2                         6
3                         7
4                         8

ID 列仍在播种 1。

我想知道是否(以及如何)在tmpShoppingCart_ID更改时重置种子计数器,例如:

tmpShoppingCart_ID        ID          ....
1                         1
1                         2
1                         3
1                         4
2                         1
2                         2
3                         1
3                         2
3                         3
3                         4
3                         5
4                         1

谢谢你的时间。

4

2 回答 2

3

用作主键时的标识列应该是连续的,而不是在表中重复。首先,您需要将 temShoppingCart_ID 和 ID 都设为唯一的 PK,以防止重复。其次,您将不能使用 IDENTITY 函数,而是在应用程序中为给定 tempShoppingCart_ID 插入的每一行设置一个计数器。

在我看来,将 ID 保留为当前的身份列。添加第二个名为 LineID 的列,并为每条记录进行增量。

于 2013-05-28T18:25:29.280 回答
2

您不能使用自动递增字段来做到这一点。如果您想这样做,您将必须编写一个触发器以根据您编写的流程填充该字段。该过程必须确保它包括多行插入并且可以处理竞争条件。你为什么要这样做?您是否打算让客户重新订购购物车 ID。他们不需要看到 id,所以第一个是 1 还是 7 无关紧要。

我确实想指出,虽然 DBCC CHECKIDENT ([Table_Name], RESEED, 0) 在技术上可能有效,但它要求用户是 sys_admin 或 db_owner 或 db_ddladmin。这些都不是应该分配给从应用程序登录以进行数据输入的用户的角色。

于 2013-05-28T18:25:16.800 回答