SQL 服务器语法,用新值替换 table 中的现有值
SQL Server syntax to replace existing values in a table by new ones
我正在使用 SQL Server 2014,我有一个名为 ReservationStay 的 table,它有 2 列,即 ResaID 和 TAProfileID。
ReservationStay table 包含超过 50,000 条记录。我需要更改 TAProfileID 的一些值。我已经确定了所有需要更改 TAProfileID 的 ResaID,并且我有大约 4,000 条记录需要更改。
我可以如下编写 SQL 查询:
UPDATE ReservationStay
SET TAProfileID = CASE Resaid
WHEN 119 THEN 984
WHEN 155 THEN 984
WHEN 175 THEN 255
.................
ELSE TAProfileID
END
GO
等等。
但是我需要为 4,000 条记录创建查询!
另一方面,我也注意到只有22个TAProfileID需要更改!只是这22个TAProfileID全部连在一起就连了4000多条Resaid。我不想根据 Resaid 更改 TAProfileID,而是更正基于 'OLD' TAProfileID 的 TAProfileID。这样会更容易维护。
换句话说,我的 SQL 查询应该考虑以下逻辑:
IF TAProfileID = 564 THEN TAProfileId 变为 984
IF TAProfileID = 701 THEN TAProfileID 变为 255
如何编写查询来处理这个问题?
创建具有两列的临时 table
CREATE TABLE temp
(
oldid int,
newid int
)
将您的逻辑插入此临时文件 table。
INSERT INTO temp
VALUES (564, 984), (701, 255);
单个更新语句。
UPDATE O
SET O.TAProfileID = T.newid
FROM ReservationStay O
JOIN temp T ON O.TAProfileID = T.oldid
我正在使用 SQL Server 2014,我有一个名为 ReservationStay 的 table,它有 2 列,即 ResaID 和 TAProfileID。
ReservationStay table 包含超过 50,000 条记录。我需要更改 TAProfileID 的一些值。我已经确定了所有需要更改 TAProfileID 的 ResaID,并且我有大约 4,000 条记录需要更改。
我可以如下编写 SQL 查询:
UPDATE ReservationStay
SET TAProfileID = CASE Resaid
WHEN 119 THEN 984
WHEN 155 THEN 984
WHEN 175 THEN 255
.................
ELSE TAProfileID
END
GO
等等。
但是我需要为 4,000 条记录创建查询!
另一方面,我也注意到只有22个TAProfileID需要更改!只是这22个TAProfileID全部连在一起就连了4000多条Resaid。我不想根据 Resaid 更改 TAProfileID,而是更正基于 'OLD' TAProfileID 的 TAProfileID。这样会更容易维护。
换句话说,我的 SQL 查询应该考虑以下逻辑:
IF TAProfileID = 564 THEN TAProfileId 变为 984
IF TAProfileID = 701 THEN TAProfileID 变为 255
如何编写查询来处理这个问题?
创建具有两列的临时 table
CREATE TABLE temp ( oldid int, newid int )
将您的逻辑插入此临时文件 table。
INSERT INTO temp VALUES (564, 984), (701, 255);
单个更新语句。
UPDATE O SET O.TAProfileID = T.newid FROM ReservationStay O JOIN temp T ON O.TAProfileID = T.oldid