复制相同 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 排序吗?
有时它需要做一些奇怪的事情。我是这样做的:
- 将整个table复制到临时table中(可能是#temporary table)
- 从 table
中删除或截断或删除记录
- 从我的临时文件中再次插入这些记录table
- 降温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
我需要将 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 排序吗?
有时它需要做一些奇怪的事情。我是这样做的:
- 将整个table复制到临时table中(可能是#temporary table)
- 从 table 中删除或截断或删除记录
- 从我的临时文件中再次插入这些记录table
- 降温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