Der Grund für diesen Fehler ist admin_id
ist nicht NULLABLE
was bedeutet, dass Sie müssen eine admin_id
haben für jede Reihe. Wenn Sie ein INSERT
ausführen Sie müssen die admin_id
ausdrücklich einfügen da es sich nicht um eine IDENTITY
handelt Eigenschaftsspalte.
Ihre erwarteten Ergebnisse zeigen, dass Sie ein UPDATE
durchführen möchten , kein INSERT
. Ein UPDATE
würde UPDATE
die admin_id
derzeit in Ihrem table_admin
Tabelle statt neue Zeilen einzufügen. Einzig unklar ist, wie der table_admin
bezieht sich auf table_information
. Wie bekommt John die admin_id = 1
zugewiesen ?
Sobald Sie das definiert haben, ist hier das UPDATE
update t
set t.admin_name = i.admin_name
from table_admin t
inner join table_information i on i.someColumn = t.someColumn
Wenn es Ihnen egal ist, welcher admin_name
erhält welche admin_id
, dann können Sie einen Ersatzschlüssel erstellen und Ihre Tabelle aktualisieren. Das würde so aussehen:
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
BEARBEITEN
Wenn Sie keine haben admin_name
derzeit in table_admin
ausgefüllt dann schlage ich vor, dass Sie diese Tabelle einfach abschneiden und Ihren eindeutigen admin_name
einfügen . Wieder würde ich auch admin_id
machen eine Identitätseigenschaft
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
Ich sollte hervorheben, dass in den meisten Schemas die admin_id
würde etwas bedeuten. Es wäre ein PRIMARY KEY
für diese Tabelle und verwendet werden, um diese Tabelle mit anderen in der Datenbank in Beziehung zu setzen. Also nicht wissen, welche admin_id
geht zu welchem admin_name
bedeutet, dass Sie ein echtes Durcheinander in Ihren Händen haben und sie zufällig zuweisen sollten nachgelagerte Prozesse unterbrechen ... aber das ist möglicherweise nicht der Fall, da Sie es nicht von Anfang an aufrechterhalten haben.
Ich würde fragen warum? Dies würde darauf hinweisen, dass Sie eine Zuordnung des admin_name
haben zu admin_id
bereits ... aber das hast du nicht gezeigt.