2012-03-28 7 views
1

Ich habe eine große Tabelle (Visits) mit Primärschlüssel kha_ID. Es gibt ein Dutzend oder so Spalten in dieser Tabelle und ich möchte nur eine von ihnen ersetzen, ADM_SRC. Das Problem besteht darin, dass ADM_SRC Nullen enthält. Ich habe eine andere Tabelle mit der kha_id und dem entsprechenden ADM_SRC dieses Datensatzes importiert. Ich hoffe, dass meine Abfrage unten die richtige ADM_SRC in den richtigen Datensatz einfügen wird.Kopieren Sie zwei Spalten in eine andere Tabelle, eine ist ein Primärschlüssel

Hier ist meine Frage, ich wollte, wenn sie passieren prüfen werde, bevor ich es laufen

INSERT INTO tblVisits (kha_id, adm_src) 
SELECT (kha_id, adm_src) from tblAdm_Src 

tblAdm_Src ist die importierte Tabelle. Vielen Dank.

+1

Sie erklären nicht, ob Sie Zeilen in tblVisits einfügen müssen, Zeilen aktualisieren oder eine Mischung aus beiden. – Phil

+0

Ich muss die Zeilen in TblVisits einfügen. – wootscootinboogie

+0

Also warum versuchst du es nicht? – Phil

Antwort

5

Unter der Annahme,

  • gibt es keine Daten in tblVisits
  • Id ist keine automatische Erhöhung Identitätsspalte
  • Alle Spalten haben einen Standardwert
  • angegeben Ihre

Dann Abfrage funktioniert

insert into tblVisits (kha_id, adm_src) select kha_id, adm_src from tblAdm_Src 

Wenn einige der Spalten keine Standardwerte haben, müssen Sie in der Abfrage Standardwerte angeben, z.

insert into tblVisits (kha_id, adm_src, otherColumn) 
select kha_id, adm_src, 'a value' from tblAdm_Src 

Wenn kha_id eine Identitätsspalte ist, müssen Sie SET IDENTITY_INSERT

set identity_insert tblVisits on 
insert into tblVisits (kha_id, adm_src) select kha_id, adm_src from tblAdm_Src 
set identity_insert tblVisits off 

verwenden, wenn vorhandene Daten in Besuch sind, und Sie müssen aktualisieren Zeilen übereinstimmt, aber fehlen diejenigen einsetzen, dann müssen Sie etwas wie

-- update existing rows 
update tblVisits 
    set adm_src = tblAdm_Sr.adm_src 
from VisitSource 
    where tblVisits.kha_id = tblAdm_Sr.kha_id 

-- insert missing rows 
insert into tblVisits (kha_id, adm_src) 
select kha_id, adm_src from tblAdm_Src 
    where not exists(
    select kha_id from tblVisits where tblVisits.kha_id = tblAdm_Src.kha_id) 

und natürlich unter Berücksichtigung der Standardwerte und Auto Erhöhen Id-Spalte als notwendig

1

Ich wollte, um zu überprüfen, ob es passieren werde, bevor ich es laufen

vielleicht ich Ihre Frage in der richtigen Art und Weise nicht verstehen .. aber was ist

  1. truning off auto commit
  2. Ihre Anfrage
  3. Prüfung das Ergebnis läuft
  4. begehen
  5. (alles ging gut) oder Rollback (nicht das Ergebnis wie erwartet)?
+0

ich bin neu auf SQL-Server und ich wusste nicht, dass es existierte/wissen, wie es geht :) – wootscootinboogie

Verwandte Themen