插入查询:列名或提供的值数与 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,如果您没有指定列,那么它将期望值 PlacedAt
、PlacedOn
和 Total
;它不会期望 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');
这是一个 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,如果您没有指定列,那么它将期望值 PlacedAt
、PlacedOn
和 Total
;它不会期望 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');