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
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.