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é.