Existe-t-il un moyen de mettre à jour plusieurs colonnes dans SQL Server de la même manière qu'une instruction d'insertion est utilisée?
Quelque chose comme:
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
Ou quelque chose comme ça, plutôt que comme ça:
update table set a=t2.a,b=t2.b etc
ce qui peut être assez fastidieux à écrire si vous avez plus de 100 colonnes.
Réponses:
Le «moyen fastidieux» est le SQL standard et la façon dont le SGBDR le fait.
Avec plus de 100 colonnes, vous avez probablement un problème de conception ... aussi, il existe des méthodes d'atténuation dans les outils client (par exemple, des instructions de génération UPDATE) ou en utilisant des ORM
la source
Essaye ça:
Cela devrait fonctionner dans la plupart des dialectes SQL, à l'exception d'Oracle.
Et oui - c'est beaucoup de frappe - c'est ainsi que SQL fait cela.
la source
La
Update table1 set (a,b,c) = (select x,y,x)
syntaxe est un exemple de l'utilisation de constructeurs de valeurs de ligne, Oracle le prend en charge , MSSQL ne le fait pas. ( Connecter l'élément )la source
Votre requête est presque correcte. Le T-SQL pour cela est:
la source
Syntaxe
Exemple
la source
Tu peux essayer ça
la source
J'ai essayé de cette façon et cela fonctionne bien:
la source
en voici un qui fonctionne:
valeur est la colonne de table_2
la source
Si vous avez besoin de retaper plusieurs fois, vous pouvez faire comme je l'ai fait une fois. Obtenez les noms de vos colonnes en lignes dans une feuille Excel (écrivez à la fin de chaque nom de colonne (=) ce qui est facile dans notepad ++) sur le côté droit, créez une colonne pour copier et coller votre valeur qui correspondra aux nouvelles entrées à chaque colonne. Ensuite, à droite d'eux, dans une colonne indépendante, mettez les virgules comme prévu
Ensuite, vous devrez copier vos valeurs dans la colonne du milieu à chaque fois, puis simplement coller et exécuter
Je ne connais pas de solution plus simple
la source
J'aimerais partager avec vous comment j'aborde ce genre de question. Mon cas est légèrement différent car le résultat de table2 est dynamique et les numéros de colonne peuvent être inférieurs à celui de table1. Mais le concept est le même.
Tout d'abord, obtenez le résultat de table2.
Ensuite, décompressez-le.
Ensuite, écrivez la requête de mise à jour à l'aide de SQL dynamique. Un exemple de code est écrit pour tester 2 tables simples - tblA et tblB
PRINT @TSQL
résultat:la source
J'ai fait cela dans MySql et il a mis à jour plusieurs colonnes dans un seul enregistrement, alors essayez ceci si vous utilisez MySql comme serveur:
Cependant, je codais dans vb.net en utilisant le serveur MySql, mais vous pouvez l'apporter à votre langage de programmation préféré dans la mesure où vous utilisez MySql comme serveur.
la source
http://www.w3schools.com/sql/sql_update.asp
la source
la source