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ś.