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.