I wrote a simple insert into statement:
insert into Worker(WorkingPlace) select WorkingPlace from source.Worker;
I got this error:
Cannot insert the value NULL into column ‘Worker_ID’, table ‘Worker’; column does not allow nulls. INSERT fails
(By the way Worker.WorkingPlace
is a nullable column)
I’m very confused, because I’m just inserting data into the ‘WorkingPlace’ column, aren’t I?
Advertisement
Answer
insert into Worker(WorkingPlace) select WorkingPlace from source.Worker;
This will create as many new rows in table Worker
as there are rows returned from the select.
So if your query returns 10 rows, then 10 new rows
will be inserted into table Worker
This means that any column in that table that is defined as not null
must receive a value, either from your query, or get a default value when that is defined.
suppose your table looks like this
create table Worker (id int not null, WorkingPlace varchar(50) null, SomeValue int not null)
then you cannot insert a row like this
insert into Worker (WorkingPlace) values ('something')
This will fail because you have not provided a value for then column id
that is defined as not null, and no value for the column SomeValue
because that is also defined as not null
if your table looks like
create table Worker (id int primary key not null identity, WorkingPlace varchar(50) null, SomeValue int not null)
then the statement
insert into Worker (WorkingPlace) values ('something')
Will only fail because there is no value for the column SomeValue
.
The column id
will get its value from the identity
Solution:
insert into Worker (WorkingPlace, SomeValue) values ('something', 123)