2013-12-19 105 views
1

我一直在开发该公司的一个表有以下设计数据库:SQL更新命令执行插入,而不是更新

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

这是没有意义的,除非'TRIGGER'解雇。你可以随意复制它吗? – egrunin

+0

检查表中是否有触发器定义。 –

+0

如果您在SSMS中运行此查询,会发生什么情况? – christiandev

回答

1

如果您确实将此陈述发送给服务器,那么唯一可能改变行为的工件是触发器。

+0

是的!我忘了告诉你有一个触发器(顺便说一句,执行不好)。现在问题解决了,谢谢! – Mudkip

+0

@Mudkip,我很高兴我可以提供帮助。如果事实上解决了您的问题,请考虑将其标记为答案。 –

2

除非它是TRIGGER,否则我会下注一些测试环境是错误地指向这个数据库的。

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 tr_Triggername ON TrainerPokemon;