我一直在开发一个数据库,其中一个表具有以下设计:
http://imageshack.us/scaled/landing/843/3z08.jpg
我尝试执行以下UPDATE命令:
UPDATE TrainerPokemon SET PokemonID = 2, lvl = 55,
AbilityID = 2, MoveSlot1 = 8, MoveSlot2 = 9,
MoveSlot3 = 6, MoveSlot4 = 7 WHERE ID = 48
这是执行UPDATE命令之前的数据表示:
http://imageshack.us/scaled/landing/853/01aa.jpg
这是执行后的数据表示:
http://imageshack.us/scaled/landing/841/ul5j.jpg
如上图所示,很明显UPDATE命令的行为类似于INSERT命令。老实说,在我使用数据库和SQL语言的这些年里,我从未见过这种行为。 在这里发生了什么?
答案 0 :(得分:2)
除非是TRIGGER
,否则我会打赌某些测试环境错误地指向此数据库。
答案 1 :(得分:2)
检查您的桌子上是否有任何触发器,否则您说的确是不可能的。执行以下语句以检查表上的任何触发器。
SELECT SO.NAME, SC.[text]
FROM sysobjects SO INNER JOIN syscomments SC
ON SO.ID = SC.ID
WHERE SO.[type] = 'TR'
AND SC.[text] LIKE '%TrainerPokemon%'
希望它很可能是一个触发器,一旦你确定它是导致问题的触发器,只需在更新之前禁用它并在完成更新后启用它。
像这样的东西
DISABLE TRIGGER
DISABLE TRIGGER tr_Triggername ON TrainerPokemon;
ENABLE TRIGGER
ENABLE TRIGGER tr_Triggername ON TrainerPokemon;
答案 2 :(得分:1)
如果您真正将此语句(如图所示)发送到服务器,那么唯一可能改变行为的工件就是触发器。