我做UPDATE时出现INSERT错误?

时间:2013-01-19 09:20:38

标签: sql sql-server tsql error-handling

在工作中,我们有一个SQL Server数据库。我不太清楚数据库。我已经在表格中创建了一个新列以获得一些新功能......我马上开始看到错误

我的陈述是:

ALTER TABLE users
ADD locked varchar(50) NULL
GO

错误是:

  

插入错误:列名或提供的值数与表定义不匹配

我已经读过在INSERT操作期间出现错误消息,提供的列名数或提供的值数与表定义不匹配。

但是我已经检查了很多次,并且我已经更改了PHP代码以包含此列数据但我仍然收到错误。

我已直接在db上运行SQL查询,但仍然出错。

有趣的是,获取错误的查询是更新。

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

2 个答案:

答案 0 :(得分:4)

你认为它可能是导致它的触发器吗?

这是您将收到的错误消息。

如果它的Update操作导致它检查触发了该表上的Updates运行的操作。

这样做:

#sp_helptrigger Users, 'UPDATE';

这将显示“更新”操作发生的触发器。

如果有触发器,请获取触发器名称并运行以下命令(但使用实际触发器替换TriggerNameHere):

#sp_helptext TriggerNameHere;

这将为您提供触发器运行的任何SQL,并且可能是错误消息所引用的INSERT。

希望这有帮助

答案 1 :(得分:1)

除了TRIGGERS

原因是您使用implicit类型的INSERT语句。假设您之前在表上的列数为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语句也不会受到影响,除非该列没有默认值且不可为空。