sql - 使用 PK 将行插入 SQL Server 表中特定位置

标签 sql sql-server insert rows

我想在 SQL Server 表的特定位置插入一行。例如,我的表有 100 行,我想在位置 9 插入一个新行。但是表的 PK ID 列已经有一个 ID 为 9 的行。如何在这个位置插入一行,以便所有移动到下一个位置后的行?

最佳答案

关系表没有“位置”。作为一种优化,索引将按指定的键对行进行排序,如果您希望在键顺序中的特定排名插入行,请使用在该排名位置排序的键插入它。在您的情况下,如果 ID 大于 8,则必须更新所有具有值的行,以将 ID 增加 1,然后插入值为 9 的 ID:

UPDATE TABLE table SET ID += 1 WHERE ID >= 9;
INSERT INTO TABLE (ID, ...) VALUES (9, ...);

不用说,做这样的事情不可能有任何合理的理由。如果您确实有这样的要求,那么您将使用具有两个(或更多)部分的复合键。这样的键允许您插入子键,以便它按所需的顺序排序。但更有可能的是,您的问题可以通过指定正确的 ORDER BY 来解决,而不会弄乱行的物理顺序。

另一种看待它的方法是重新考虑主键的含义:实体的标识符,在该实体的生命周期内不会改变。然后你的问题可以重新表述,使你的问题中的谬误更加明显:

I want to change the content of the entity with ID 9 to some new value. The old values of the entity 9 should be moved to the content of entity with ID 10. The old content of entity with ID 10 should be moved to the entity with ID 11... and so on and so forth. The old content of the entity with the highest ID should be inserted as a new entity.

关于sql - 使用 PK 将行插入 SQL Server 表中特定位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6962867/

相关文章:

MySql 基本表创建/处理

c# - SQL Scope_Identity 返回 0 或 -1

SQL更新查询和 'subquery returned more than one value'

insert - sqlalchemy 的 MapperExtension 的一些问题

mysql - 从当年的所有星期日和星期六插入 MySQL 表

mysql - SQL - 选择月份中的所有客户

php - 如何显示group by中的所有列

sql-server - 将 SQL Server 数据库导入 HDFS 或 HIVE

sql-server - 自动刷新 SQL Server Management Studio 中的查询?

Java MySQL : Insert special charactar into database