Причината да получите тази грешка е, че admin_id
не е NULLABLE
което означава, че трябва имат admin_id
за всеки ред. Когато изпълнявате INSERT
трябва изрично да вмъкнете admin_id
тъй като не е IDENTITY
колона собственост.
Очакваните ви резултати показват, че искате да направите UPDATE
, а не INSERT
. UPDATE
ще UPDATE
admin_id
в момента във вашия table_admin
таблица вместо вмъкване на нови редове. Единственото нещо, което не е ясно, е как table_admin
се отнася до table_information
. Как на john се присвоява admin_id = 1
?
След като дефинирате това, ето UPDATE
update t
set t.admin_name = i.admin_name
from table_admin t
inner join table_information i on i.someColumn = t.someColumn
Ако не ви интересува кое admin_name
получава какъв admin_id
, тогава можете да създадете сурогатен ключ и да актуализирате вашата таблица. Ще изглежда така:
select distinct
admin_name
,admin_id = row_number() over (order by (select null))
into #tempInformation
from table_information
--this is going to show the admin_id that will be updated in the table_admin table
select * from #tempInformation
update t
set t.admin_name = i.admin_name
from table_admin t
inner join #tempInformation i on i.admin_id = t.admin_id
РЕДАКТИРАНЕ
Ако нямате никакви admin_name
понастоящем попълнен в table_admin
тогава ви предлагам просто да съкратите тази таблица и да вмъкнете вашето различно admin_name
. Отново бих направил и admin_id
свойство за идентичност
truncate table table_admin
insert into table_admin (admin_id, admin_name)
select distinct
admin_id = row_number() over (order by (select null))
,admin_name
Трябва да подчертая, че в повечето схеми admin_id
би означавало нещо. Това ще бъде PRIMARY KEY
за тази таблица и да се използва за свързване на тази таблица с други в базата данни. Следователно, не знаейки кой admin_id
отива към това admin_name
означава, че имате истинска бъркотия в ръцете си и присвояването им на случаен принцип трябва прекъсване на процесите надолу по веригата... но това може да не е така, тъй като не сте го поддържали от самото начало.
Бих попитал защо? Това би означавало, че имате съпоставяне на admin_name
до admin_id
вече... но не си показал това.