SQL Update命令执行插入而不是更新

SQL Update命令执行插入而不是更新,sql,sql-server,sql-update,sql-insert,Sql,Sql Server,Sql Update,Sql Insert,我一直在开发一个数据库,其中一个表具有以下设计: 我已尝试执行以下更新命令: UPDATE TrainerPokemon SET PokemonID = 2, lvl = 55, AbilityID = 2, MoveSlot1 = 8, MoveSlot2 = 9, MoveSlot3 = 6, MoveSlot4 = 7 WHERE ID = 48 这是执行UPDATE命令之前的数据表示形式: UPDATE TrainerPokemon SET PokemonID = 2, lvl

我一直在开发一个数据库,其中一个表具有以下设计:

我已尝试执行以下更新命令:

UPDATE TrainerPokemon SET PokemonID = 2, lvl = 55, 
AbilityID = 2, MoveSlot1 = 8, MoveSlot2 = 9, 
MoveSlot3 = 6, MoveSlot4 = 7 WHERE ID = 48
这是执行UPDATE命令之前的数据表示形式:

UPDATE TrainerPokemon SET PokemonID = 2, lvl = 55, 
AbilityID = 2, MoveSlot1 = 8, MoveSlot2 = 9, 
MoveSlot3 = 6, MoveSlot4 = 7 WHERE ID = 48

这是执行后的数据表示:

如上图所示,很明显,UPDATE命令的行为类似于INSERT命令。老实说,在我使用数据库和SQL语言的这些年里,我从未见过这种行为。
这里可能发生了什么?

如果您真的要将此语句(如图所示)发送到服务器,那么唯一可以更改行为的工件就是触发器。

如果您真的要发送此语句(如图所示),对于服务器来说,唯一可以改变行为的工件是触发器。

除非它是
触发器,否则我打赌某些测试环境错误地指向了该数据库。

除非它是
触发器
,我敢打赌,某些测试环境错误地指向了这个数据库。

检查您的表上是否定义了任何触发器,否则您所说的确实是不可能的。执行以下语句检查表上的所有触发器

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 tr_Triggername ON TrainerPokemon;
ENABLE TRIGGER tr_Triggername ON TrainerPokemon;
启用触发器

DISABLE TRIGGER tr_Triggername ON TrainerPokemon;
ENABLE TRIGGER tr_Triggername ON TrainerPokemon;

检查您的表上是否定义了任何触发器,否则您所说的确实是不可能的。执行以下语句检查表上的所有触发器

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 tr_Triggername ON TrainerPokemon;
ENABLE TRIGGER tr_Triggername ON TrainerPokemon;
启用触发器

DISABLE TRIGGER tr_Triggername ON TrainerPokemon;
ENABLE TRIGGER tr_Triggername ON TrainerPokemon;

这毫无意义,除非触发了
触发器。您可以随意复制它吗?检查您的表上是否定义了任何触发器。如果您在SSMS中运行此查询会发生什么情况?事实上,有一个触发器实现得很糟糕这没有意义,除非触发了
触发器。您可以随意复制它吗?检查您的表上是否定义了任何触发器。如果您在SSMS中运行此查询会发生什么?事实上,有一个触发器实现得很糟糕是的!我忘了告诉你有一个触发器(顺便说一句,它的实现很糟糕)。问题现在解决了,谢谢@Mudkip,我很高兴能帮上忙。如果事实上解决了你的问题,请考虑把它标记为答案。是的,确实如此!我忘了告诉你有一个触发器(顺便说一句,它的实现很糟糕)。问题现在解决了,谢谢@Mudkip,我很高兴能帮上忙。如果事实上解决了你的问题,请考虑把它标记为答案。