在工作中,我们有一个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
答案 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
语句也不会受到影响,除非该列没有默认值且不可为空。