插入查询:列名或提供的值的数量与表定义不匹配
Posted
技术标签:
【中文标题】插入查询:列名或提供的值的数量与表定义不匹配【英文标题】:Insert query: Column name or number of supplied values does not match table definition 【发布时间】:2021-06-02 09:17:19 【问题描述】:这是一个自动递增 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 Server 给了我这个错误:
列名或提供的值数量与表定义不匹配。
【问题讨论】:
【参考方案1】:错误告诉你问题所在。您的表OrderPlaced
有四个 列,但您只在INSERT
中提供一个 列,并且不告诉实例将其插入到哪一列。
对于您的表,如果您不指定列,那么它将期望PlacedAt
、PlacedOn
和Total
的值;它不会期望 OrderID
的值,因为它是 IDENTITY
并且您尚未打开 IDENTITY_INSERT
。由于实例需要 3 列,而您只提供了 1 列,因此您会收到一条错误消息,告诉您列数不匹配 (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);
虽然我不推荐这个解决方案,但是如果你改变表的定义,上面的语句就会失败。
【讨论】:
你能帮我吗?放置在的原始语句是 PlacetAt time Default convert(varchar(10), GETDATE(), 108),我不知道如何调用它,因为我不会插入任何值? 我不明白你在@HSaad 那里问的问题,但如果你有新问题,ask a new question。【参考方案2】:您还需要指定列名,如下所示:
INSERT INTO table_name (column1, column2, column3, ...) VALUES (value1, value2, value3, ...);
所以它会是这样的:
insert into OrderPlaced values ('13:40');
【讨论】:
以上是关于插入查询:列名或提供的值的数量与表定义不匹配的主要内容,如果未能解决你的问题,请参考以下文章