2013-12-19 106 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;