使用恢复的数据库中的值和匹配的 ID 更新当前数据库

Updating current database with values from restored database and matching IDs

我的游戏有一个 table,叫做 monsterClass。

这是一个非常简单的 table,包含这些列:

id
monsterName
monsterMapYear
monsterTreasure
locationId

这里是示例数据:

[  1 |  'Orc'         |  5000  | 'gold'   |  2932  ]
[  2 |  'Goblin'      |  6000  | 'silver' |  4611  ]
[  3 |  'Red Dragon'  |  3000  | 'gems'   |  8573  ]

等等

好吧,愚蠢的我很快就尝试用新的 monsterMapYear (7000) 更新一组特定的怪物,混合了各种名称的怪物。

我确实将所需的怪物集设置为具有 7000 的 monsterMapYear。但是我无意中将所有其他怪物(不在我想更改的集中)设置为 NULL 的 monsterMapYear。

所以我将以前的备份恢复到一个新数据库,所以我拥有了我不小心覆盖的数据。

现在我正在尝试进行更新,以将 NULL 值更新为之前我将所有内容搞砸之前设置的值。

到目前为止,这是我的查询:

UPDATE Game_Production.dbo.monsterClass
SET monsterMapYear = (
    SELECT monsterMapYear 
    FROM TMP_RESTORE_Game.dbo.monsterClass 
    WHERE monsterMapYear <> 7000
    AND monsterMapYear IS NOT NULL
    )

但我不确定如何将生产数据库中怪物的 ID 与临时恢复数据库中的怪物 ID 匹配。

有没有办法做到这一点并且安全地 运行 这个查询?

谢谢!

您应该可以使用 id:

UPDATE newdata
    SET monsterMapYear = olddata.monsterMapYear 
FROM TMP_RESTORE_Game.dbo.monsterClass olddata JOIN
     Game_Production.dbo.monsterClass newdata
     ON olddata.id = newdata.id
WHERE newdata.monsterMapYear IS NULL OR
      newdata.monsterMapYear <> olddata.monsterMapYear;

未来参考:在进行更新之前将您的更新放入 "Begin Transaction" "Rollback Transaction" 块中进行测试。

  BEGIN TRANSACTION

  --Print out existing data

  SELECT * FROM monsterClass

  --Count the rows in the monsterClass table

  SELECT COUNT(*) FROM monsterClass

  --Update the data - Please check the number of rows updated versus the row count in the existing monster class printed earlier

  your update statement goes here

  --Print out the updated data

  SELECT * FROM monterClass

  --Undo the changes

  ROLLBACK TRANSACTION

此时,您可以验证您的更新工作正常。当数据更新正确并且你想更新 table 时,将 "ROLLBACK TRANSACTION" 更改为 "COMMIT TRANSACTION" 并重新 运行 SQL 查询批处理。