SQL Server语法用新的

时间:2015-10-14 09:47:44

标签: sql-server replace case

我正在使用SQL Server 2014,我有一个名为ReservationStay的表,有2列,即ResaID和TAProfileID。 ReservationStay表包含超过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都连接到4,000个Resaid。我不想基于Resaid更改TAProfileID,而是基于' OLD'而不是更正TAProfileID。 TAProfileID。这将更容易维护。

换句话说,我的SQL查询应该考虑这个逻辑:

如果TAProfileID = 564那么TAProfileId变为984

如果TAProfileID = 701那么TAProfileID变为255

如何编写查询来处理此问题?

1 个答案:

答案 0 :(得分:2)

  1. 创建包含两列的临时表

    CREATE TABLE temp
    (
       oldid int,
       newid int
    )
    
  2. 将您的逻辑插入此临时表。

    INSERT INTO temp
    VALUES (564, 984), (701, 255);
    
  3. 单一更新声明。

    UPDATE O
    SET O.TAProfileID = T.newid
    FROM ReservationStay O
    JOIN temp T ON O.TAProfileID = T.oldid