插入查询:列名或提供的值数与 table 定义不匹配

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

这是一个 table,它会自动递增 ID,获取时间输入,并将总计列的默认值设置为零,并将日期列设置为 getdate()

CREATE TABLE OrderPlaced (
    OrderID bigint IDENTITY(1,1) PRIMARY KEY,
    PlacedAt time NOT NULL,
    PlacedOn DATE NOT NULL default getdate(),
    Total MONEY default 0
)

所以我必须插入的唯一值是时间。

insert into OrderPlaced values ('13:40'); 

但是在插入时 SQL 服务器给我这个错误:

Column name or number of supplied values does not match table definition.

错误告诉您问题所在。您的 table、OrderPlaced 四个 列,但您只在 INSERT 中提供 一个 列并且不要告诉实例将其插入到哪一列。

对于您的 table,如果您没有指定列,那么它将期望值 PlacedAtPlacedOnTotal;它不会期望 OrderID 的值,因为它是 IDENTITY 而您还没有打开 IDENTITY_INSERT。由于实例需要 3 列,而您只提供一列,因此您会收到一条错误消息,告诉您列数不匹配 (3 != 1).

如果您只想在 PlacedAt 中插入一个值,并允许其余列使用它们的 DEFAULT 值,那么在您的 INSERT 子句中定义您只想提供PlacedAt 的值:

INSERT INTO dbo.OrderPlaced(PlacedAt)
VALUES ('13:40');

或者,如果您(奇怪地)反对在 INSERT 子句中定义列,则告诉实例其他 2 列需要它们的 DEFAULT 值。

INSERT INTO dbo.OrderPlaced
VALUES ('13:40',DEFAULT, DEFAULT);

虽然我不推荐这种解决方案,但如果您更改 table 的定义,请明确说明,上述语句将失败。

您还需要指定列名,如下所示:

INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);

所以会变成这样:

insert into OrderPlaced values ('13:40');