我正在尝试使用select插入表并添加几个额外的列。额外的列具有默认值,默认情况下,一个列由一个序列填充,因此不确定为什么我不能这样做:
insert into ADDRESS_HIST
select * from ADDRESS;
获取错误:
Msg 213,Level 16,State 1,Line 3
列名或提供的值数与表定义不匹配。
insert into ADDRESS_HIST
select
*,
null as [END_DATE],
getdate() as [EFFECTIVE_DATE],
next value for ADDRESS_HIST_ID_SEQ as [ADDRESS_HIST_ID]
from
ADDRESS;
错误:
Msg 515,Level 16,State 2,Line 1
无法将值NULL插入列'ADDRESS_HIST_ID',表'ADDRESS_HIST';列不允许空值。 INSERT失败。
我测试了我的序列及其工作正常。
任何有识之士都非常感激。
编辑:我认为如果额外的列提供了默认值或可以为空,那么第一个示例是可能的。我的错。 第二个例子有什么问题?我显然是从ADDRESS_HIST_ID的序列中提供一个值。
答案 0 :(得分:1)
错误消息已经给你答案。
在第一种情况下,如果ADDRESS_HIST
的列数与ADDRESS
的列数不同,则必须指定列
INSERT INTO TABLE_NAME
(column1, column2, column3,...columnN) VALUES
(value1, value2, value3,...valueN);
在第二种情况下,显然您要将空值插入ADDRESS_HIST
的不可为空的列。