Il motivo per cui ricevi questo errore è perché admin_id
non è NULLABLE
il che significa che devi avere un admin_id
per ogni riga. Quando esegui un INSERT
devi inserire esplicitamente il admin_id
poiché non è un IDENTITY
colonna proprietà.
I risultati attesi mostrano che desideri eseguire un UPDATE
, non un INSERT
. Un UPDATE
sarebbe UPDATE
il admin_id
attualmente nel tuo table_admin
tabella invece di inserire nuove righe. L'unica cosa che non è chiara è come table_admin
si riferisce a table_information
. Come viene assegnato a john admin_id = 1
?
Una volta definito, ecco il UPDATE
update t
set t.admin_name = i.admin_name
from table_admin t
inner join table_information i on i.someColumn = t.someColumn
Se non ti interessa quale admin_name
ottiene cosa admin_id
, quindi puoi creare una chiave surrogata e aggiornare la tua tabella. Sarebbe simile a questo:
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
MODIFICA
Se non ne hai nessuno admin_name
attualmente popolato nel table_admin
quindi ti suggerisco di troncare quella tabella e inserire il tuo distinto admin_name
. Di nuovo, farei anche admin_id
una proprietà di identità
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
Dovrei evidenziare che nella maggior parte degli schemi, admin_id
significherebbe qualcosa. Sarebbe una PRIMARY KEY
per questa tabella e da usare per correlare questa tabella ad altre nel database. Quindi, non sapendo quale admin_id
va a quale admin_name
significa che hai un vero pasticcio tra le mani e assegnarli a caso dovresti interrompi i processi a valle ... ma potrebbe non essere il caso poiché non lo hai tenuto aggiornato per cominciare.
Vorrei chiedere perché? Questo alluderebbe a una mappatura del admin_name
a admin_id
già... ma non l'hai mostrato.