我想在特定位置的SQL服务器表中插入一行.例如,我的表有100行,而且我有一个名为LineNumber的字段,我想在第9行之后插入一个新行.但是表的PK的ID列已经有一行含有LineNumber 9.所以现在我需要行号为9或10的新行,以便ID字段必须自动更新.如何在此位置插入一行,以便在它移动到下一个位置后的所有行?
不要修改主键,这不是修改输出顺序的好方法,因为您有要插入的新记录.
在表格中添加新列以保存您的订单.然后,在对新行进行所需更改之前,如果这是您当前的订单,则可以将主键值复制到该列.
您应该能够复制和粘贴并按原样运行的示例:
我添加了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
*/
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1022 次 |
| 最近记录: |