Gibt es eine Möglichkeit, mehrere Spalten in SQL Server auf dieselbe Weise zu aktualisieren, wie eine Einfügeanweisung verwendet wird?
Etwas wie:
Update table1 set (a,b,c,d,e,f,g,h,i,j,k)=
(t2.a,t2.b,t2.c,t2.d,t2.e,t2.f,t2.g,t2.h,t2.i,t2.j,t2.k)
from table2 t2
where table1.id=table2.id
Oder so ähnlich, anstatt so:
update table set a=t2.a,b=t2.b etc
Das Schreiben kann ziemlich mühsam sein, wenn Sie mehr als 100 Spalten haben.
Antworten:
Der "lästige Weg" ist Standard-SQL und wie Mainstream-RDBMS es tun.
Bei mehr als 100 Spalten haben Sie höchstwahrscheinlich ein Entwurfsproblem. Außerdem gibt es mildernde Methoden in Client-Tools (z. B. Generierung von UPDATE-Anweisungen) oder mithilfe von ORMs
quelle
Versuche dies:
Dies sollte in den meisten SQL-Dialekten außer Oracle funktionieren.
Und ja - es wird viel getippt - so macht SQL das.
quelle
Die
Update table1 set (a,b,c) = (select x,y,x)
Syntax ist ein Beispiel für die Verwendung von Zeilenwertkonstruktoren. Oracle unterstützt dies , MSSQL nicht. ( Element verbinden )quelle
Ihre Anfrage ist fast korrekt. Das T-SQL dafür ist:
quelle
Syntax
Beispiel
quelle
Sie können dies versuchen
quelle
Ich habe es auf diese Weise versucht und es funktioniert gut:
quelle
Hier ist eine, die funktioniert:
Wert ist die Spalte aus Tabelle_2
quelle
Wenn Sie dies mehrmals neu eingeben müssen, können Sie es wie ich einmal tun. Holen Sie sich die Namen Ihrer Spalten in Zeilen in Excel-Tabelle (notieren Sie sich am Ende jedes Spaltennamens (=), was in Notepad ++ einfach ist) auf der rechten Seite. Erstellen Sie eine Spalte, um Ihren Wert zu kopieren und einzufügen, der den neuen Einträgen bei entspricht jede Spalte. Dann setzen Sie rechts davon in einer unabhängigen Spalte die Kommas wie vorgesehen
Dann müssen Sie Ihre Werte jedes Mal in die mittlere Spalte kopieren, dann einfach einfügen und ausführen
Ich kenne keine einfachere Lösung
quelle
Ich möchte Ihnen mitteilen, wie ich diese Art von Frage anspreche. Mein Fall ist etwas anders, da das Ergebnis von Tabelle2 dynamisch ist und die Spaltennummern möglicherweise kleiner als die von Tabelle1 sind. Das Konzept ist jedoch dasselbe.
Erhalten Sie zuerst das Ergebnis von Tabelle2.
Als nächstes drehen Sie es auf.
Schreiben Sie dann die Aktualisierungsabfrage mit dynamischem SQL. Beispielcode wurde zum Testen von 2 einfachen Tabellen geschrieben - tblA und tblB
PRINT @TSQL
Ergebnis:quelle
Ich habe dies in MySQL getan und es hat mehrere Spalten in einem einzigen Datensatz aktualisiert. Versuchen Sie dies also, wenn Sie MySQL als Server verwenden:
Ich habe in vb.net mit dem MySql-Server codiert, aber Sie können es zu Ihrer bevorzugten Programmiersprache bringen, sofern Sie MySql als Server verwenden.
quelle
http://www.w3schools.com/sql/sql_update.asp
quelle
quelle