身份认证中的自动增量(是身份)

时间:2015-01-19 02:46:53

标签: c# sql-server auto-increment

我有一个使用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      |
+-----------+------------+

我该如何解决?我尝试过,但没有成功。谢谢。

4 个答案:

答案 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或任何控件中。