如何删除主键ID的行?

时间:2014-03-24 12:26:42

标签: sql-server

我有一个SQL表用户。它有3列id(设置为主列,Is Identity为Yes),名称和密码。当我向表格输入数据时,id会增加。但是在删除查询时,只会删除名称和密码。我需要删除包含id的特定行。 例如:

id:1 name:abc password:123
id:2 name:wer password:234
id:3 name:lkj password:222
id:4 name:new password:999

我需要删除第三列,即 id:3名称:lkj密码:222 。但删除此行后,表格应如下所示。

id:1 name:abc password:123
id:2 name:wer password:234
id:3 name:new password:999

3 个答案:

答案 0 :(得分:1)

正如@Tony所说,一旦使用了一个数字,它就不再可用了。此问题的解决方法如下:
1.根本不要使用Identity字段。仅使用整数字段设置为主键 2.声明每当插入新行时触发的触发器 3.此触发器必须读取表中最后一个插入行的ID并将其递增1并将结果插入ID字段。
因此,当您稍后删除此行时,ID将再次可用。

答案 1 :(得分:1)

如果您想稍后重用该ID,那是一个非常糟糕的主意。不要走那条路。唯一的方法是遇到性能问题,或者在遇到竞争条件时很容易出错。有一个原因,为什么udntities毕竟不重用值。无论如何,id应该毫无意义。除了个人偏好之外,通常没有理由不跳过值。但个人偏好不应优先考虑性能和可靠性。如果你想点头,因为你讨厌跳过的值,那就不要了。如果您从上面得到这个要求,那么回过头来。告诉他们替代方案更耗时且更不可靠,并且更有可能导致数据完整性问题。

答案 2 :(得分:1)

根据您提供的其他信息,它显示您不了解IDENTITY数据类型。正如包括我在内的其他人所说,数字不会被重复使用。

您还应该避免因删除行而更改主键。

看起来你需要一个行号,不要使用这个键。使用ROW_NUMBER函数创建视图,例如

SELECT ROW_NUMBER() OVER (Order by id) AS row_number, name, password, ...
FROM [Your_Table]