带有由默认值填充的select和extra列的T-SQL插入

时间:2017-02-22 02:11:38

标签: sql-server tsql

我正在尝试使用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的序列中提供一个值。

1 个答案:

答案 0 :(得分:1)

错误消息已经给你答案。

在第一种情况下,如果ADDRESS_HIST的列数与ADDRESS的列数不同,则必须指定列

INSERT INTO TABLE_NAME 
  (column1, column2, column3,...columnN) VALUES 
  (value1, value2, value3,...valueN);

在第二种情况下,显然您要将空值插入ADDRESS_HIST的不可为空的列。