Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL server中,如何强制ID列保持顺序,即使已删除记录的内容?_Sql_Sql Server_Tsql - Fatal编程技术网

在SQL server中,如何强制ID列保持顺序,即使已删除记录的内容?

在SQL server中,如何强制ID列保持顺序,即使已删除记录的内容?,sql,sql-server,tsql,Sql,Sql Server,Tsql,我不知道这个问题的最佳措辞是什么,但我有一个表有两列:ID和NAME。 当我从表中删除一条记录时,相关的ID字段会随之删除,然后序列会被破坏。 举个例子: 如果我删除了第2行,ID列的顺序将是:1,3,4 如何制作:1,2,3如果你想要序列号,不要将它们存储在数据库中。这只是一个维护的噩梦,我真的想不出一个很好的理由,你甚至想麻烦 在查询数据时,只需使用tSQL函数动态生成它们 标识列的整个要点是创建一个可靠的标识符,您可以指望它指向数据库中的该行。如果你把他们转移到你身边,你就破坏了你想要身

我不知道这个问题的最佳措辞是什么,但我有一个表有两列:ID和NAME。 当我从表中删除一条记录时,相关的ID字段会随之删除,然后序列会被破坏。 举个例子:

如果我删除了第2行,ID列的顺序将是:1,3,4


如何制作:1,2,3如果你想要序列号,不要将它们存储在数据库中。这只是一个维护的噩梦,我真的想不出一个很好的理由,你甚至想麻烦

在查询数据时,只需使用tSQL函数动态生成它们

标识列的整个要点是创建一个可靠的标识符,您可以指望它指向数据库中的该行。如果你把他们转移到你身边,你就破坏了你想要身份证的主要原因


在一个现实世界的例子中,如果IRS希望每周更改您的SSN,以便在人们去世后保持社保号码的连续性,您会有什么感受?

如果您希望连续性号码,请不要将其存储在数据库中。这只是一个维护的噩梦,我真的想不出一个很好的理由,你甚至想麻烦

在查询数据时,只需使用tSQL函数动态生成它们

标识列的整个要点是创建一个可靠的标识符,您可以指望它指向数据库中的该行。如果你把他们转移到你身边,你就破坏了你想要身份证的主要原因


在一个现实世界的例子中,如果美国国税局希望每周更改您的社会保障号码,以便在人们去世后保持社会保障号码的顺序,您会有什么感受?

ID的唯一性是有原因的。考虑这种情况:

**Customers**
id value
1  John
2  Jackie

**Accounts**
id customer_id balance
1  1           $500
2  2           $1000
对于关系数据库,假设您要从数据库中删除“John”。现在Jackie的客户id是1。当杰基进去检查这里的余额时,她现在将显示500美元的空头

当然,你可以浏览并更新她所有的其他记录,但是A)这将是一个巨大的麻烦。B)出错非常容易,特别是在一个大型数据库中

ID(本例中的主键)是用来将关系数据库连接在一起的岩石,无论表是什么,您都应该能够依赖该值


正如JohnFx指出的,如果你想要一个显示用户顺序的值,在查询时考虑使用内置函数。

id是有原因的唯一原因。考虑这种情况:

**Customers**
id value
1  John
2  Jackie

**Accounts**
id customer_id balance
1  1           $500
2  2           $1000
对于关系数据库,假设您要从数据库中删除“John”。现在Jackie的客户id是1。当杰基进去检查这里的余额时,她现在将显示500美元的空头

当然,你可以浏览并更新她所有的其他记录,但是A)这将是一个巨大的麻烦。B)出错非常容易,特别是在一个大型数据库中

ID(本例中的主键)是用来将关系数据库连接在一起的岩石,无论表是什么,您都应该能够依赖该值


正如JohnFx指出的,如果您想要一个显示用户顺序的值,在查询时考虑使用内置函数。SQLServer标识列中的

不能保证是连续的。从数据库查询数据时,可以使用ROW_NUMBER函数生成ID的顺序列表:

SELECT 
    ROW_NUMBER() OVER (ORDER BY Id) AS SequentialId, 
    Id As UniqueId, 
    Name 
FROM dbo.Details

在SQL Server中,不能保证标识列是连续的。从数据库查询数据时,可以使用ROW_NUMBER函数生成ID的顺序列表:

SELECT 
    ROW_NUMBER() OVER (ORDER BY Id) AS SequentialId, 
    Id As UniqueId, 
    Name 
FROM dbo.Details

您可能希望使用id字段以外的其他列进行排序。这将为您提供所需的灵活性。不,我只有这个表,但在连接数据库的程序中,序列是必需的。如果ID是identity列,则运行“set identity_insert on”,然后您可以插入自己的标识键。或者,您可以使用序列号。如果您需要没有间隙的id,则程序中存在错误。id列意味着是无意义的数字,请以这种方式处理它们。您可能希望使用id字段以外的其他列进行排序。这将为您提供所需的灵活性。不,我只有这个表,但在连接数据库的程序中,序列是必需的。如果ID是identity列,则运行“set identity_insert on”,然后您可以插入自己的标识键。或者,您可以使用序列号。如果您需要没有间隙的id,则程序中存在错误,id列意味着是无意义的数字,请以这种方式处理它们