Wie aktualisiert man eine Tabelle von einer anderen ohne Angabe von Spaltennamen?

8

Ich habe zwei Tabellen mit identischer Struktur und sehr großer Anzahl von Feldern (etwa 1000). Ich muss 2 Operationen durchführen 1) Fügen Sie aus der zweiten Tabelle alle Zeilen in die Faust ein. Beispiel:

%Vor%

2) Aktualisieren Sie die erste Tabelle aus der zweiten Tabelle aber für update kann ich keine richtige sql syntax für update finden.

Fragen wie:

%Vor%

oder

%Vor%

sind ungültig.

    
amuliar 08.10.2010, 14:56
quelle

2 Antworten

3

Nicht sicher, ob Sie dies erreichen können, ohne dynamic sql zu verwenden, um die update-Anweisung in einer Variablen zu erstellen.

Diese Anweisung gibt eine Liste von Spalten basierend auf dem Tabellennamen zurück, den Sie eingegeben haben:

%Vor%

Nicht sicher, ob ich hier eine Schleife vermeiden kann. Sie müssen die Ergebnisse von oben in einen Cursor laden und dann eine Abfrage daraus erstellen. Psuedo codiert:

%Vor%

Wenn die Abfrage in der Schleife erstellt wurde, verwenden Sie exec sp_executesql @query.

Nur eine kleine Warnung ... dynamischer SQL in einer solchen Schleife kann etwas verwirrend werden. Für die Fehlersuche setzen Sie eine ausgewählte @Query in die Schleife und sehen zu, wie die @Query erstellt wird.

bearbeiten: Nicht sicher, ob Sie in der Lage sein werden, alle 1000 Zeilen in einem Update gleichzeitig auszuführen ... es gibt logische Grenzen (varchar (8000)?) Für die Größe, die @query auch wachsen kann. Möglicherweise müssen Sie den Code so teilen, dass er 50 Spalten gleichzeitig verarbeitet. Setzen Sie die Spalten aus der Syscolumns-Select-Anweisung in eine temporäre Tabelle mit einer ID und erstellen Sie Ihre dynamische SQL, so dass sie 20 Spalten (oder 50?) Gleichzeitig aktualisiert.

Eine andere Alternative wäre, Excel zu verwenden, um das zu bauen. Wählen Sie in der Spalte die Ergebnisse aus und kopieren Sie sie in die Spalte a einer Tabelle. Setzen '= in Spalte b, tmp. [12331312] In Spalte c kopieren Sie die Spalte a in die Spalte D und ein Komma in die Spalte e. Kopieren Sie die gesamte Tabelle in einen Notizblock, und Sie sollten die Spalten der update-Anweisung für Sie erstellt haben. Keine schlechte Lösung, wenn es sich um ein One-Shot-Event handelt, nicht sicher, ob ich mich darauf als laufende Lösung verlassen würde.

    
Twelfth 08.10.2010, 16:21
quelle
5

Würde es funktionieren, alles aus der Master-Tabelle zu löschen, die eine ID in temp hatte, und dann mit den neuen Daten einfügen?

    
Kendrick 08.10.2010 14:59
quelle