2013-01-19 28 views
2

在工作中,我們有一個SQL Server數據庫。我不太瞭解數據庫。我創建的表中的一些新功能,新的一列....馬上我已經開始看到錯誤當我做更新時得到INSERT錯誤?

我的發言是這樣的:

ALTER TABLE users 
ADD locked varchar(50) NULL 
GO 

的錯誤是:

Insert Error: Column name or number of supplied values does not match table definition

我讀過INSERT操作期間出現的錯誤消息,提供的列名稱數或提供的值數與表定義不匹配。

但我已經檢查了很多次,並且我已經更改了PHP代碼以包含此列數據,但我仍然收到錯誤消息。

我已經直接在數據庫上運行SQL查詢,仍然得到錯誤。

有趣的是,獲取錯誤的查詢是更新。

UPDATE "users" 
SET "users"."date_last_login" = GETDATE() 
WHERE id = 1 
+1

這可能是由於@craigtaub在答案中說的觸發器。尋找那些。 –

回答

4

您是否認爲這可能是觸發器造成的?

這是您將得到的錯誤消息。

如果其Update操作導致它檢查該表上的更新運行的觸發器操作。

做它用:

#sp_helptrigger Users, 'UPDATE'; 

這將顯示觸發器與「更新」行動存在的。

如果有一個觸發器,搶觸發器名稱和運行以下(但與真正的觸發替換TriggerNameHere):

#sp_helptext TriggerNameHere; 

這會給你的觸發運行任何SQL和可能的插入錯誤信息是指。

希望這有助於

+0

是的,我可以看到有一個觸發器,它正在對錶進行INSERT。我應該可以從這裏修復它。 Theres在聲明中缺少一列。我很煩,它沒有說觸發器的查詢。謝謝, – PhilipJason

1
TRIGGERS

除此之外,

的原因是因爲你使用implicitINSERT聲明。比方說,你以前的表中的列數爲3.你有INSERT語句的這個語法,

INSERT INTO tableName VALUES ('val1','val2','val3') 

其執行正常的罰款。但是,你已經改變了表格添加另一列。您所有的INSERT查詢都只在表格中插入三個與列總數不匹配的值。

爲了解決這個問題,你必須更新所有INSERT語句在表中插入4個值,

INSERT INTO tableName VALUES ('val1','val2','val3', 'val4') 

,它通常會正常工作。

我建議您使用EXPLICIT類型的INSERT,其中您必須指定要插入值的列。例如,

INSERT INTO tableName (col1, col2, col3) VALUES ('val1','val2','val3') 
在這方面

,即使你已經通過添加額外的列改變了你的表,你INSERT聲明將不會受到影響,除非該列沒有默認值,它是不可爲空。

+0

嗨,謝謝,是的,我很快看到觸發器運行的SQL是這樣做的,所以修復了它,它只是花了我很長時間才發現,因爲我不明白爲什麼更新會導致此問題。 – PhilipJason

相關問題