2017-02-22 14 views
0

selectを使用してテーブルに挿入しようとしました。余分な列にはデフォルト値を持っていると私が行うことができない理由1はそれほどわからない、デフォルトで順序によって移入されます。選択と追加の列がデフォルト値で設定された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.

私は自分のシーケンスとそれが正常に動作していることをテストしました。

洞察力が最も高く評価されています。

編集:最初の例は、余分な列がデフォルト値またはNULL可能である場合に可能であると考えました。私の間違い。 2番目の例の問題点は何ですか?私は明らかにADDRESS_HIST_IDのシーケンスから値を供給しています。

+0

エラーmsgは非常に明示的です。 –

+0

テーブルのスキーマを追加すると便利です。適切なソフトウェア(MySQL、Oracle、DB2など)とバージョンの両方でデータベースの質問にタグを付けると便利です。 'sql-server-2014'です。 – HABO

答えて

1

エラーメッセージからは、すでに回答が得られています。最初のケースで

ADDRESS_HISTの列の数がADDRESSのものと異なる場合、2番目のケースで

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

のような列を指定する必要があり、明らかにあなたは、NULL値を挿入していますADDRESS_HISTのnull不可能な列に追加します。

+0

したがって、テーブル定義によってデフォルト値が指定されていても、最初のケースは不可能ですか? 2番目のケースは可能ですか?再び、私はエラーメッセージが不平を言っている列の値を提供していることは明らかです。 – rocketboy2000

+0

@ rocketboy2000はい、デフォルト値は役に立ちません。どの列にデフォルト値を与えるべきかはわかりません。明示的に列を指定することをお勧めします。また、表スキーマが変更された場合でもデータの挿入が損なわれないようにする必要があります。 2番目のケースでは、列の数が一致している場合は問題ありません。しかしそれは好まれません。 – ydoow

+0

私はちょうど私の問題が...「extra_column1」などのような余分な列名を修飾しようとする可能性がありますが、SQL Serverはこれを無視しているようです。列名は、表に表示される順序でなければなりません。 – rocketboy2000

関連する問題