首页 > 解决方案 > 使用恢复的数据库中的值和匹配的 ID 更新当前数据库

问题描述

我的游戏有一个名为 monsterClass 的表。

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

id
monsterName
monsterMapYear
monsterTreasure
locationId

这是示例数据:

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

ETC

好吧,愚蠢的我很快就试图用新的 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 相匹配。

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

谢谢!

标签: sqltsqlsql-server-2008sql-server-2012

解决方案


未来参考:在进行更新之前,将您的更新放在“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

此时,您可以验证您的更新是否正常。当数据正确更新并且您想要更新表时,将“ROLLBACK TRANSACTION”更改为“COMMIT TRANSACTION”并重新运行SQL查询批处理。


推荐阅读