Sql 如何不在列中存储值?

Sql 如何不在列中存储值?,sql,sql-server,Sql,Sql Server,我有一张漂亮的桌子 create table Records ( Id uniqueidentifier primary key, Occasion datetime not null, Information varchar(999) default ' ' ) 当我执行下面的第一行时,我得到一个错误。当我执行第二个命令时,我在单元格中看到NULL。我应该如何在表中插入内容,以使默认的空白生效 insert into Records values (newid(), conver

我有一张漂亮的桌子

create table Records (
  Id uniqueidentifier primary key,
  Occasion datetime not null,
  Information varchar(999) default ' '
)
当我执行下面的第一行时,我得到一个错误。当我执行第二个命令时,我在单元格中看到NULL。我应该如何在表中插入内容,以使默认的空白生效

insert into Records values (newid(), convert(varchar(21), getdate(), 121))
insert into Records values (newid(), convert(varchar(21), getdate(), 121), null)
错误消息是默认消息,但我还是会把它放在这里,以防有人问

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

试试这个:

insert into Records values (newid(), convert(varchar(21), getdate()), 121)

您必须使用
默认值
关键字关闭convert的

INSERT INTO Records VALUES (newid(), CONVERT(varchar(21), getdate(), 121), DEFAULT)
或者,最好使用
INSERT
语句指定精确的列

INSERT INTO Records (Id, Occasion) 
VALUES (newid(), CONVERT(varchar(21), getdate(), 121))
或:

为什么更好

  • 因为您不应该依赖表中列的顺序
  • 因为您不应该依赖这样一个事实,即表永远不会有任何新的或删除的列(此时您的查询将再次中断)
  • 同样有趣的是:

    试试这个


    当您在insert查询中未指定列名时,sql server要求所有列都有值。这就是为什么第一个查询会抛出错误,因为您只为两列提供了值,而第二个查询正在正确运行。

    请尝试指定要插入的列名。例如:
    insert into Records(Id,场合)
    并查看它是否有帮助首先,在插入后添加列列表,以明确定义要插入的列。其次,在将
    GETDATE()
    放入datetime列时,不要将其强制转换为varchar。尝试一下,然后返回您错误放置了convert()函数(121)的第三个参数.Aah k.没想到。谢谢。否决投票,因为这完全改变了意图(信息栏将插入121)并且忽略了海报出现错误的实际原因。回答很好。切中要害,并且有示例和备选方案。+1肯定。但是,我不清楚为什么使用命名参数而不是默认关键字更好。这是我的C#ness惊吓吗?我会编辑答案。问题不是
    默认值
    ,而是缺少明确的C
    INTO
    子句中的列。哦,这是一个很好的解释。如果我不是一个卑鄙的混蛋和推销员,我会赏金给你的,呵呵。一旦我超过10公里,我就会开始这么做。但首先,我需要得到5位数的推销员。@KonradViltersten:我们会再见面。你可以赏金给我另一个答案,将来;)
    INSERT INTO Records (Id, Occasion, Information) 
    VALUES (newid(), CONVERT(varchar(21), getdate(), 121), DEFAULT)
    
    insert into Records (
      Id 
      Occasion 
    )
    values (newid(), convert(varchar(21), getdate()), 121))