Důvodem, proč se vám zobrazuje tato chyba, je admin_id není NULLABLE to znamená, že musíte mít admin_id pro každý řádek. Když provedete INSERT musíte explicitně vložit admin_id protože to není IDENTITY sloupec vlastností.
Očekávané výsledky ukazují, že chcete provést UPDATE , nikoli INSERT . A UPDATE by UPDATE admin_id aktuálně ve vašem table_admin místo vkládání nových řádků. Jedna věc, která není jasná, je způsob, jakým table_admin se týká table_information . Jak John získá přiřazení admin_id = 1 ?
Jakmile to definujete, zde je UPDATE
update t
set t.admin_name = i.admin_name
from table_admin t
inner join table_information i on i.someColumn = t.someColumn
Pokud je vám jedno, které admin_name získá co admin_id , pak můžete vytvořit náhradní klíč a aktualizovat tabulku. Bude to vypadat takto:
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
UPRAVIT
Pokud žádné nemáte admin_name aktuálně vyplněno v table_admin pak navrhuji, abyste tuto tabulku zkrátili a vložili své odlišné admin_name . Opět bych také vytvořil admin_id vlastnost identity
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
Měl bych zdůraznit, že ve většině schémat je admin_id by něco znamenalo. Byl by to PRIMARY KEY pro tuto tabulku a použít ke spojení této tabulky s ostatními v databázi. Nevědět tedy, které admin_id přejde ke kterému admin_name znamená, že máte na rukou skutečný nepořádek a přiřazujete je náhodně by mělo rozbít následné procesy... ale nemusí to tak být, protože jste to ze začátku neudržovali.
Ptal bych se proč? To by naznačovalo, že máte mapování admin_name na admin_id už... ale neukázal jsi to.