我有一个使用Microsoft SQL Server 2012的表
Name
+-----------+------------+
| IDName | Name |
+-----------+------------+
|1 | Doddy |
|2 | Rinta |
|3 | Krida |
|4 | Debbie |
+-----------+------------+
我设置" IDName"列和设置"是"在身份认同(身份认同)中,身份增量= 1,身份种子= 1.因此,如果我插入新行,例如" Bobby"和#34; Tommy",IDName列自动插入
Name
+-----------+------------+
| IDName | Name |
+-----------+------------+
|1 | Doddy |
|2 | Rinta |
|3 | Krida |
|4 | Debbie |
|5 | Bobby |
|6 | Tommy |
+-----------+------------+
如果我删除一行,该表将是这样的
Name
+-----------+------------+
| IDName | Name |
+-----------+------------+
|1 | Doddy |
|2 | Rinta |
|3 | Krida |
|4 | Debbie |
|5 | Bobby |
+-----------+------------+
现在是我的问题。如果我添加一个具有相同或不同名称的新行,则IDName不会设置为6,而是像这样设置为7。
Name
+-----------+------------+
| IDName | Name |
+-----------+------------+
|1 | Doddy |
|2 | Rinta |
|3 | Krida |
|4 | Debbie |
|5 | Bobby |
|7 | Tommy |
+-----------+------------+
如果我重新删除并重新插入,IDName不会设置为6或7,而是8.
Name
+-----------+------------+
| IDName | Name |
+-----------+------------+
|1 | Doddy |
|2 | Rinta |
|3 | Krida |
|4 | Debbie |
|5 | Bobby |
|8 | Tommy |
+-----------+------------+
我该如何解决?我尝试过,但没有成功。谢谢。
答案 0 :(得分:1)
最好尝试编写要插入的过程。
在插入之前从表中获取最大IDName
并将IDName+1
插入表格中。
这是一种解决方法。如果您仅在删除时遇到问题,将会很有帮助。
答案 1 :(得分:0)
你无法解决它。 SQL服务器不会在表中检查id的“漏洞”,因为它可能会降低性能。
如果您需要“序列号”字段,则必须实现此逻辑。
事实上,这种逻辑并不经常需要。确保你真的需要序列号,因为它们的实现并非易事。
答案 2 :(得分:0)
考虑这些情况:
同时有4个连接插入表中。 3 Connections为其Insert启动Transaction,然后回滚Transaction。 1连接提交其插入。
表格中有8条记录,其中ID为1-8。我删除偶数ID的2,4,6,8。
不要担心漏洞,因为你无法阻止它们......
答案 3 :(得分:0)
我建议您不要更改数据库中的任何内容,因为序列号可以在C#程序的运行时生成,以显示在dataGridView或任何控件中。