Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como inserir os dados de uma coluna em outra tabela


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.