Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Comment insérer les données d'une colonne dans une autre table

La raison pour laquelle vous obtenez cette erreur est que admin_id n'est pas NULLABLE ce qui signifie que vous devez avoir un admin_id pour chaque rangée. Lorsque vous effectuez un INSERT vous devez insérer explicitement le admin_id puisqu'il ne s'agit pas d'une IDENTITY colonne de propriété.

Vos résultats attendus montrent que vous voulez faire une UPDATE , pas un INSERT . Une UPDATE ferait UPDATE le admin_id actuellement dans votre table_admin table au lieu d'insérer de nouvelles lignes. La seule chose qui n'est pas claire est la façon dont le table_admin se rapporte à table_information . Comment John obtient-il admin_id = 1 ?

Une fois que vous avez défini cela, voici la UPDATE

update t 
set t.admin_name = i.admin_name
from table_admin t
inner join table_information i on i.someColumn = t.someColumn

Si vous ne vous souciez pas de quel admin_name obtient ce que admin_id , vous pouvez alors créer une clé de substitution et mettre à jour votre table. Cela ressemblerait à ceci :

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

MODIFIER

Si vous n'en avez pas aucun admin_name actuellement renseigné dans la table_admin alors je vous suggère de simplement tronquer ce tableau et d'insérer votre distinct admin_name . Encore une fois, je ferais aussi admin_id une propriété d'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

Je dois souligner que dans la plupart des schémas, le admin_id signifierait quelque chose. Ce serait une PRIMARY KEY pour cette table et être utilisé pour relier cette table à d'autres dans la base de données. Ainsi, ne pas savoir quel admin_id va à quel admin_name signifie que vous avez un vrai gâchis entre vos mains et les assigner au hasard devrait interrompez les processus en aval... mais ce n'est peut-être pas le cas puisque vous ne l'avez pas maintenu au départ.

Je demanderais pourquoi ? Cela ferait allusion au fait que vous avez un mappage du admin_name à admin_id déjà... mais vous ne l'avez pas montré.