复制相同 table 中的行

Copying the rows within the same table

我需要将 table 末尾附加的内容移动到最开头,但是 正在将同一记录复制到目标中。

换句话说,在ids 1和3567之间,我只有id 3567的记录重复到最后。我相信我的外部甚至内部子查询缺少某些东西?

感谢提示

查询:

  UPDATE dbo.TABLE
  SET Xwgs = dt.Xwgs, Ywgs = dt.Ywgs
  FROM 
     (
        SELECT
            Xwgs,
            Ywgs
        FROM dbo.TABLE
        WHERE 
            Id BETWEEN 3567 AND 7243
     ) dt
  WHERE
    Id BETWEEN 1 AND 3566

这是你想要的吗?

update t
set xwgs = dt.xwgs, ywgs = dt.ywgs
from mytable t
inner join (
    select xwgs, ywgs
    from mytable
    where id between 3567 and 7243
) dt
on t.id = dt.id - 3566

与您的查询的主要区别在于它正确关联了目标 table 和派生的 table。

请注意,这实际上并没有移动行;它所做的只是将上层存储桶中的值复制到下层存储桶中的相应值。

你知道你总是可以用 ORDER BY id DESC 对你的 table 排序吗?

有时它需要做一些奇怪的事情。我是这样做的:

  1. 将整个table复制到临时table中(可能是#temporary table)
  2. 从 table
  3. 中删除或截断或删除记录
  4. 从我的临时文件中再次插入这些记录table
  5. 降温table

但是更新也是一个解决方案。

提示: 您可以使用 SET IDENTITY_INSERT

允许将值插入标识(自动增量)id
SELECT *
INTO tmp__MyTable -- this will create a new table
FROM MyTable
ORDER BY id

DELETE FROM dbo.MyTable -- will throw an error on foreign keys conflicts

INSERT INTO MyTable (col,col2) -- column list here
SELECT col,col2
FROM tmp__MyTable
ORDER BY id DESC
-- or something like that: 
-- ORDER BY CASE WHEN id <= 3566 THEN -id ELSE id END

-- DROP TABLE tmp__MyTable