Przyczyną tego błędu jest to, że admin_id nie jest NULLABLE co oznacza, że musisz mieć admin_id dla każdego rzędu. Kiedy wykonujesz INSERT musisz jawnie wstawić admin_id ponieważ nie jest to IDENTITY kolumna właściwości.
Oczekiwane wyniki wskazują, że chcesz wykonać UPDATE , a nie INSERT . UPDATE zrobi UPDATE admin_id obecnie w Twoim table_admin tabeli zamiast wstawiania nowych wierszy. Jedyną niejasną rzeczą jest to, jak table_admin odnosi się do table_information . W jaki sposób John otrzymuje przypisanie admin_id = 1 ?
Gdy to zdefiniujesz, oto UPDATE
update t
set t.admin_name = i.admin_name
from table_admin t
inner join table_information i on i.someColumn = t.someColumn
Jeśli nie obchodzi Cię, który admin_name pobiera co admin_id , możesz utworzyć klucz zastępczy i zaktualizować swoją tabelę. Wyglądałoby to tak:
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
EDYTUJ
Jeśli nie masz żadnych admin_name obecnie wypełniane w table_admin sugeruję po prostu skrócić tę tabelę i wstawić odrębną admin_name . Znowu zrobiłbym też admin_id właściwość tożsamości
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
Powinienem podkreślić, że w większości schematów admin_id by coś znaczyło. Byłby to PRIMARY KEY dla tej tabeli i być używany do powiązania tej tabeli z innymi w bazie danych. Tak więc, nie wiedząc, który admin_id przechodzi do którego admin_name oznacza, że masz bałagan na rękach i przydzielanie ich losowo powinien rozbić dalsze procesy ... ale może tak nie być, ponieważ nie nadążałeś za tym od początku.
Pytam dlaczego? Oznaczałoby to, że masz mapowanie admin_name do admin_id już... ale tego nie pokazałeś.