PBM*_*eIt 4 sql-server sql-server-2016
我有一个带有订单/位置列的 SQL Server 2016 表。此列是一个 INT,用于指示表中行的首选顺序/位置以供演示。
如何在不使用游标的情况下在位置 1 插入一行?(即新行的位置为 1,现有行 - 假设在插入之前顺序正确 - 必须“向下移动”)
order/position 列不是 NULL 并强制为 UNIQUE。我也不想使用“钝力”技术,例如将所有行的顺序/位置值设置为一些“从未使用”的值,然后只对所有行执行重新排序。
我想你想要这样的东西:
BEGIN TRANSACTION ;
DECLARE @pos INT = 1 ;
UPDATE tbl
SET position = position + 1
WHERE position >= @pos
AND EXISTS
(SELECT * FROM tbl WHERE position = @pos) ;
INSERT INTO tbl
(<column names>, position)
VALUES
(<values ...>, @pos) ;
COMMIT TRANSACTION ;
Run Code Online (Sandbox Code Playgroud)
请注意,如果您经常插入,则此设计将表现得非常低效。它基本上会为每个新插入更新几乎整个表!
归档时间: |
|
查看次数: |
1572 次 |
最近记录: |