sql - 使用恢复的数据库中的值和匹配的 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 相匹配。
有没有办法做到这一点并安全地运行这个查询?
谢谢!
解决方案
未来参考:在进行更新之前,将您的更新放在“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查询批处理。
推荐阅读
- java - 处理程序停止主线程
- android - 在没有 WAKE_LOCK 权限的情况下卡在 Android Vitals 中的部分唤醒锁定?
- python - 将字符串转换为整数列表
- user-interface - Swift - UIStackView 中的 UIPanRecognizer
- c# - 在gridview [asp.net]中返回checkboxlist多个值
- r - 当我单击运行时使用 RStudio,它可以正确执行,但使用源代码,它会给我一条错误消息
- javascript - 如何在运行的特定时间分析 nodejs 应用程序?
- c# - 使用新屏幕的控制台应用程序
- python - 线程处理时出现异步 aiohttp 错误
- javascript - Javascript addEventListener 回调逻辑