Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

So fügen Sie die Daten aus einer Spalte in eine andere Tabelle ein

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.