sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan indsætter du data fra en kolonne i en anden tabel

Grunden til at du får denne fejl, er fordi admin_id er ikke NULLABLE hvilket betyder, at du skal har et admin_id for hver række. Når du udfører en INSERT du skal udtrykkeligt indsætte admin_id da det ikke er en IDENTITY egenskabskolonnen.

Dine forventede resultater viser, at du vil lave en OPDATERING , ikke en INSERT . En OPDATERING ville OPDATERE admin_id i øjeblikket i din table_admin tabel i stedet for at indsætte nye rækker. Den ene ting, der er uklar, er, hvordan table_admin relaterer til tabelinformation . Hvordan bliver john tildelt admin_id =1 ?

Når du har defineret det, er her OPDATERING

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

Hvis du er ligeglad hvilken admin_name får hvad admin_id , så kan du oprette en surrogatnøgle og opdatere din tabel. Det ville se sådan ud:

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

REDIGER

Hvis du ikke har nogle admin_name i øjeblikket udfyldt i table_admin så foreslår jeg, at du bare trunkerer tabellen og indsætter dit særskilte admin_name . Igen ville jeg også lave admin_id en identitetsejendom

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

Jeg bør fremhæve, at i de fleste skemaer er admin_id ville betyde noget. Det ville være en PRIMÆR NØGLE for denne tabel og bruges til at relatere denne tabel til andre i databasen. Altså uden at vide hvilket admin_id går til hvilken admin_name betyder, at du har et rigtig rod på dine hænder, og at tildele dem tilfældigt bør bryde nedstrøms processer... men det er måske ikke tilfældet, da du ikke har holdt det op til at begynde med.

Jeg ville spørge hvorfor? Dette ville hentyde til, at du har en kortlægning af admin_name til admin_id allerede... men det har du ikke vist.




  1. Halloween-problemet – del 1

  2. Sådan udføres installation af en EBS 12.2 Vision-instans

  3. Forespørgsel om flere tabeller i Oracle SQL plus 11g

  4. Kald til udefineret funktion oci_connect, php_oci8_12c.dll, windows 8.1, php5.6.6