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.