O motivo pelo qual você recebe este erro é porque
admin_id não é NULLABLE o que significa que você deve tem um admin_id para cada linha. Quando você executa um INSERT você deve inserir explicitamente o admin_id já que não é uma IDENTITY coluna de propriedade. Seus resultados esperados mostram que você deseja fazer um
UPDATE , não um INSERT . Uma UPDATE UPDATE o admin_id atualmente em seu table_admin tabela em vez de inserir novas linhas. A única coisa que não está clara é como o table_admin refere-se a table_information . Como john é atribuído admin_id = 1 ? Depois de definir isso, aqui está o
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 você não se importa com qual
admin_name obtém o que admin_id , você poderá criar uma chave substituta e atualizar sua tabela. Ficaria assim: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
EDITAR
Se você não tiver nenhum
admin_name atualmente preenchido no table_admin então sugiro que você apenas trunque essa tabela e insira seu admin_name distinto . Novamente, eu também faria admin_id uma propriedade de identidade 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
Devo destacar que na maioria dos esquemas, o
admin_id significaria algo. Seria uma PRIMARY KEY para esta tabela e ser usado para relacionar esta tabela com outras no banco de dados. Assim, não saber qual admin_id vai para qual admin_name significa que você tem uma verdadeira bagunça em suas mãos e atribuí-los aleatoriamente deve quebrar processos a jusante... mas isso pode não ser o caso, já que você não tem mantido isso para começar. Eu perguntaria por quê? Isso indicaria que você tem um mapeamento do
admin_name para admin_id já... mas você não mostrou isso.