Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Come inserire i dati da una colonna in un'altra tabella

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.