我想在特定位置向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. 如何在表中插入空記錄
- 3. 如何在子表中插入記錄?
- 4. 如何在SQL中的特定記錄之間插入記錄
- 5. 在記錄列表之間插入新記錄
- 6. MYSQL表2中的表1更新記錄插入新記錄
- 7. 插入父表時插入在外鍵表中的新記錄
- 8. C#如何:如果新的記錄被插入到mysql表中
- 9. 我如何在此表中插入新記錄?
- 10. 如何在表中插入更新和刪除記錄
- 11. 如何找到oracle表中記錄的插入時間
- 12. 如何獲取只在sql中新插入的更新記錄?
- 13. MySQL不在任何表中插入記錄
- 14. 如何在成功更新grails中的記錄後插入新記錄
- 15. 如何插入記錄到具有6054條記錄的表中
- 16. 如何檢查插入MySQL表中的新記錄是否
- 17. 如何更新舊記錄時插入新記錄?
- 18. 如何更新sqlite表,如果記錄存在其他插入?
- 19. 如何自動對新記錄插入
- 20. 如何在GridView中插入記錄
- 21. 如何在MVC4中插入記錄?
- 22. 如何在插入新記錄到postgresql表時調用序列?
- 23. 如何在MySQL的PROCEDURE中使用新插入記錄的ID?
- 24. 如何在pl/sql中正確使用記錄表和記錄表插入表
- 25. Ecto插入中間記錄
- 26. 如何插入一條記錄到表
- 27. 如何插入和更新記錄從虛表到主表sql
- 28. 插入表中的記錄
- 29. 如何使插入和更新蒙哥記錄時間戳差?
- 30. Azure移動服務:無法向表中插入任何記錄?
表格固有地未排序,所以您不能插入一條記錄「在中間」。你能改說你的問題嗎? – HoneyBadger
這只是一次性交易或您需要定期執行的事情嗎? –
請提供樣品數據。 – NEER