当我做UPDATE时得到INSERT错误



在工作中我们有一个SQL Server数据库。我不太了解数据库。我在表中为一些新功能....创建了一个新列我马上开始看到错误

我的声明是这样的:

ALTER TABLE users
ADD locked varchar(50) NULL
GO

错误是:

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

我读到,当在INSERT操作期间,提供的列名数量或提供的值数量与表定义不匹配时,会出现错误消息。

但是我已经检查了很多次,我已经改变了PHP代码,包括这个列的数据,但我仍然收到错误。

我直接在数据库上运行SQL查询,仍然得到错误。

有趣的是,得到错误的查询是一个Update。

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

你有没有考虑过这可能是一个触发因素?

这是您将得到的错误信息。

如果它是一个Update动作导致它检查触发动作更新表运行。

用:

#sp_helptrigger Users, 'UPDATE';

这将显示与' update '操作一起发生的触发器。

如果有一个触发器,获取触发器的名称并运行下面的命令(但将TriggerNameHere替换为真实的触发器):

#sp_helptext TriggerNameHere;

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

希望能有所帮助

除了TRIGGERS

这样做的原因是因为您正在使用INSERT语句的implicit类型。假设之前表上的列数是3。你有INSERT语句的语法,

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

执行正常。但随后您修改了表,添加了另一列。所有的INSERT查询都只在表上插入三个值,这与列的总数不匹配。

为了解决这个问题,你必须更新所有的INSERT语句,在表中插入4个值,

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

,它将正常工作。

我建议您使用INSERTEXPLICIT类型,其中您必须指定要插入值的列。例如,

INSERT INTO tableName (col1, col2, col3) VALUES ('val1','val2','val3')
通过这种方式,即使您通过添加额外的列更改了表,您的INSERT语句也不会受到影响,除非该列没有默认值并且不可为空。

最新更新