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惊吓吗?我会编辑答案。问题不是默认值
,而是缺少明确的CINTO
子句中的列。哦,这是一个很好的解释。如果我不是一个卑鄙的混蛋和推销员,我会赏金给你的,呵呵。一旦我超过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))