我想在特定位置向SQL服务器表中插入一行。例如,我的表有100行,我也有一个名为LineNumber的字段,我想要在第9行后面插入一个新行。但表中PK的ID列已经有一行LineNumber 9.所以现在我需要行号为9或10的新行,以便ID字段必须自动更新。我如何在这个位置插入一行,以便它后面的所有行转移到下一个位置?如何在任何表的中间插入新记录
回答
是什么让这个困难的是,该列是主键。如果您可以在没有其他人时与数据库交互,那么您可以这样做:
- 使该列不再是主键。
- 这样运行的命令:
UPDATE MyTable SET PrimaryColumnID = PrimaryColumnID + 1 WHERE PrimaryColumnID > 8
- 插入行与适当PrimaryColumnID(9)。
- 将列还原为主键。
很明显,这可能不适用于大型表格。您可以创建一个新的主键列并将其切换,然后修复这些值,然后将其切换回来。
不好的建议只是“让列不再是主键”,许多事情可能依赖于主键,那么对于任何引用链接表中主键的东西,你会做什么? – Tanner
@坦纳只是暂时。当然,我认为桌子可以单独使用。 –
@tanner你有没有在测试数据库中做过这件事?我当然有。你为50个州制定了一个表格,然后意识到你没有按字母顺序排列它们,所以你放下主键,对它们重新编号,然后再加入主键。然后当你复制到现场时,它的顺序是正确的。 –
不要修改主键,这不是修改输出顺序的好方法,因为您有一个要插入的新记录。
在表格上添加一个新列以保存您的订单。然后,您可以将主键值复制到该列中(如果这是您当前的顺序),然后对新行进行所需的更改。
样,你应该能够复制和粘贴和运行:
我已经添加orderid
列,您将需要使用默认空值做。
DECLARE @OrderTable AS TABLE
(
id INT ,
val VARCHAR(5) ,
orderid INT
)
INSERT INTO @OrderTable
(id, val, orderid)
VALUES (1, 'aaa', NULL)
,
(2, 'bbb', NULL)
,
(3, 'ddd', NULL)
SELECT *
FROM @OrderTable
-- Produces:
/*
id val orderid
1 aaa NULL
2 bbb NULL
3 ddd NULL
*/
-- Update the `orderid` column to your existing order:
UPDATE @OrderTable
SET orderid = id
SELECT *
FROM @OrderTable
-- Produces:
/*
id val orderid
1 aaa 1
2 bbb 2
3 ddd 3
*/
-- Then you want to add a new item to change the order:
DECLARE @newVal AS NVARCHAR(5) = 'ccc'
DECLARE @newValOrder AS INT = 3
-- Update the table to prepare for the new row:
UPDATE @OrderTable
SET orderid = orderid + 1
WHERE orderid >= 3
-- this inserts ID = 4, which is what your primary key would do by default
-- this is just an example with hard coded value
INSERT INTO @OrderTable
(id, val, orderid)
VALUES (4, @newVal, @newValOrder)
-- Select the data, using the new order column:
SELECT *
FROM @OrderTable
ORDER BY orderid
-- Produces:
/*
id val orderid
1 aaa 1
2 bbb 2
4 ccc 3
3 ddd 4
*/
- 1. 如何在表中插入空记录
- 2. MYSQL表2中的表1更新记录插入新记录
- 3. C#如何:如果新的记录被插入到mysql表中
- 4. 如何在成功更新grails中的记录后插入新记录
- 5. MySQL不在任何表中插入记录
- 6. 如何检查插入MySQL表中的新记录是否
- 7. 如何自动对新记录插入
- 8. 如何在GridView中插入记录
- 9. 如何在插入新记录到postgresql表时调用序列?
- 10. 如何在pl/sql中正确使用记录表和记录表插入表
- 11. Ecto插入中间记录
- 12. 如何插入一条记录到表
- 13. 插入表中的记录
- 14. 如何使插入和更新蒙哥记录时间戳差?
- 15. 在表中如何在rails3.0中一次插入多个记录?
- 16. 如何在插入新记录后重新排序记录,VBA,MS ACCESS
- 17. 如何在Flask Eve中插入有记录和列表的记录?
- 18. 如何在使用光标的现有表中插入记录
- 19. 如何记录在MySQL中的特定表的插入/更新查询5
- 20. 如何在TreePanel中插入新记录(模型)?
- 21. 如何在AdventureWorks2016中使用BusinessIdentityId插入新记录
- 22. 如何在django中记录模型插入,更新和删除
- 23. 如何在codeigniter活动记录中使用select插入记录
- 24. 从表中插入记录
- 25. 如何在列和表格中保持插入和更新的历史记录?
- 26. 如何在插入和更新时检查表格中的重复记录
- 27. 如何将一张表中的记录插入第二张表
- 28. 在两个表之间插入记录插入(选择何时计算年龄)
- 29. 如何在div下插入记录?
- 30. 如何在特定表格中插入记录?
表格固有地未排序,所以您不能插入一条记录“在中间”。你能改说你的问题吗? – HoneyBadger
这只是一次性交易或您需要定期执行的事情吗? –
请提供样品数据。 – NEER