T-SQL插入与选择和额外列填充默认值
我试图插入到一个表使用选择并添加一些额外的列。额外的列有默认值和一个被默认所以不知道序列填充为什么我不能做:T-SQL插入与选择和额外列填充默认值
insert into ADDRESS_HIST
select * from ADDRESS;
四处错误:
Msg 213, Level 16, State 1, Line 3
Column name or number of supplied values does not match table definition.
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
Cannot insert the value NULL into column 'ADDRESS_HIST_ID', table 'ADDRESS_HIST'; column does not allow nulls. INSERT fails.
我已经测试了我的序列和它的工作正常。
任何见解最受赞赏。
编辑:我认为,第一个例子是可能的,如果额外的列或者提供了一个默认值或可为空。我的错。 第二个例子的问题是什么?我清楚地从ADDRESS_HIST_ID的序列中提供一个值。
错误信息已经给你答案。
在第一种情况下,如果ADDRESS_HIST
列数是从的ADDRESS
不同,你必须像
INSERT INTO TABLE_NAME
(column1, column2, column3,...columnN) VALUES
(value1, value2, value3,...valueN);
指定列在第二种情况下,很显然你要插入一个空值转换为ADDRESS_HIST
的不可空列。
因此,即使默认值由表定义提供,第一种情况也是不可能的。第二种情况是可能的?再一次,它显而易见,我为错误消息所抱怨的列提供了一个值。 – rocketboy2000
@ rocketboy2000是的,默认值没有帮助。它不知道应该给哪一列默认值。您最好明确指定列,以确保在表格模式更改的情况下数据插入不会混乱。第二种情况,如果列数匹配可能会很好。但这不是首选。 – ydoow
我想出了我的问题是什么......可以尝试限定额外列名称,如“as extra_column1”等,但sql server似乎忽略了这一点。列名必须按它们在表格中出现的顺序排列。 – rocketboy2000
错误消息非常明确。 –
为表格添加模式将会很有帮助。使用相应的软件(MySQL,Oracle,DB2,...)和版本(例如, '的SQL服务器2014'。 – HABO