使用默认列值插入表中

时间:2013-04-09 10:57:37

标签: sql sql-server

我创建了一个默认列值male

的表
CREATE TABLE Persons 
 (name varchar(20), 
  age int, 
  sex varchar(5) default 'male')

插入声明#1:

INSERT INTO Persons values('Bob', 20)

插入声明#2:

INSERT INTO Persons(name,sex) values('Bob', 20)

当我尝试使用insert语句#1将值插入Persons表时,我收到如下错误

  

列名或提供的值数与表定义不匹配

但是当我使用语句#2插入Persons时,它成功执行。

有人可以解释一下为什么会这样吗?

4 个答案:

答案 0 :(得分:7)

那么,在你的陈述#1中,如果你省略列的列表,你必须所有三个列提供值,并且你不是那样做的。如果你只提供其中两个值,那就是失败的原因。

你的陈述#2应该是:

INSERT INTO Persons(name, age) values('Bob', 20)

然后您明确指定要插入哪些列(nameage),并且您提供填充两列所需的两个值 - 这是它为何有效。第三列将填充配置的默认值,因为您没有为其指定任何内容。

由于这些原因,我建议始终明确指定要插入数据的列的列表 - 不要只是省略该列表而假设你'让所有专栏正确.....

答案 1 :(得分:3)

如果您不想写字段,VALUES必须与表格中的字段数相匹配。

您可以使用DEFAULT四个目的:

 INSERT INTO Persons VALUES('Bob', 20, DEFAULT);

答案 2 :(得分:2)

第一个失败是因为您没有在INSERT语句中指定任何列。然后,您只提供两列而不是全部3列的值,因此它不知道将值放入哪些列...这不会起作用。

第二个有效,因为您明确声明要插入namegender并且您为每列指定一个值。

以下内容有效(但我怀疑您希望20列中有gender):

INSERT INTO Persons(name,gender) 
values('Bob',20)

或者:

INSERT INTO Persons(name,age) 
values('Bob',20)

我猜你真的想插入age而不是gender。明确说明要将数据插入哪些列非常重要,以便在右列中获取数据。

答案 3 :(得分:0)

您的表格有3列 -

Name
Age
Gender

您已为性别设置了默认值。在查询(1)中,您为3列提供2个值,而没有列列表。因此错误。

拉​​吉