2

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

我的陈述是这样的:

ALTER TABLE users
ADD locked varchar(50) NULL
GO

错误是:

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

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

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

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

有趣的是,得到错误的查询是更新。

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

2 回答 2

4

您是否认为它可能是导致它的触发器? 

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

如果它的更新操作导致它检查该表上的更新运行的触发操作。

这样做:

#sp_helptrigger Users, 'UPDATE';

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

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

#sp_helptext TriggerNameHere;

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

希望这可以帮助

于 2013-01-19T09:22:57.107 回答
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语句也不会受到影响,除非该列没有默认值并且不可为空。

于 2013-01-19T09:28:06.383 回答