Anledningen till att du får det här felet är att admin_id
är inte NULLBAR
vilket betyder att du måste har ett admin_id
för varje rad. När du utför en INSERT
du måste uttryckligen infoga admin_id
eftersom det inte är en IDENTITY
egenskapskolumnen.
Dina förväntade resultat visar att du vill göra en UPPDATERING
, inte en INSERT
. En UPPDATERING
skulle UPPDATERA
admin_id
för närvarande i din table_admin
tabell istället för att infoga nya rader. Det enda som är oklart är hur table_admin
relaterar till tabellinformation
. Hur tilldelas john admin_id =1
?
När du har definierat det, här är
update t
set t.admin_name = i.admin_name
from table_admin t
inner join table_information i on i.someColumn = t.someColumn
Om du inte bryr dig vilket admin_name
får vad admin_id
, då kan du skapa en surrogatnyckel och uppdatera din tabell. Det skulle se ut så här:
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
REDIGERA
Om du inte har några admin_name
för närvarande ifylld i table_admin
då föreslår jag att du bara trunkerar den tabellen och infogar ditt distinkta admin_name
. Återigen, jag skulle också göra admin_id
en identitetsegenskap
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
Jag bör betona att i de flesta scheman är admin_id
skulle betyda något. Det skulle vara en PRIMÄRNYCKEL
för denna tabell och användas för att relatera denna tabell till andra i databasen. Alltså, utan att veta vilket admin_id
går till vilken admin_name
betyder att du har en riktig röra på dina händer och att tilldela dem slumpmässigt bör bryta nedströmsprocesser... men det kanske inte är fallet eftersom du inte har hållit på med det till att börja med.
Jag skulle fråga varför? Detta skulle antyda att du har en mappning av admin_name
till admin_id
redan... men det har du inte visat.