web-dev-qa-db-fra.com

Mettre à jour plusieurs colonnes en SQL

Existe-t-il un moyen de mettre à jour plusieurs colonnes dans SQL Server de la même manière qu'une instruction insert?

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.

150
Joe

La "méthode fastidieuse" est le SQL standard et comment le SGBDR traditionnel le fait.

Avec plus de 100 colonnes, vous avez probablement un problème de conception. De plus, il existe des méthodes d'atténuation dans les outils clients (par exemple, les instructions de génération UPDATE) ou en utilisant des ORM.

79
gbn

Essaye ça:

UPDATE table1 
SET a = t2.a, b = t2.b, .......
FROM table2 t2
WHERE table1.id = t2.id

Cela devrait fonctionner dans la plupart des dialectes SQL, à l'exclusion d'Oracle.

Et oui - c'est beaucoup de frappe - c'est la façon dont SQL le fait.

188
marc_s

La syntaxe Update table1 set (a,b,c) = (select x,y,x) est un exemple d'utilisation de constructeurs de valeur de ligne, Oracle le prend en charge , MSSQL ne le fait pas. ( élément de connexion )

20
Alex K.

Votre requête est presque correcte. Le T-SQL pour cela est:

UPDATE  Table1
SET     Field1 = Table2.Field1,
        Field2 = Table2.Field2,
        other columns...
FROM    Table2
WHERE   Table1.ID = Table2.ID
16
John Woo

Syntaxe

UPDATE table-name 
SET column-name = value, column-name = value, ...
WHERE condition

Exemple

UPDATE school
SET course = 'mysqli', teacher = 'Tanzania', student = 'you'
WHERE id = 6
13
betrice mpalanzi
   UPDATE t1 
    SET 
    t1.a = t2.a,
    t1.b = t2.b,
    .
    .
    .


    FROM 
    table1 t1 
    INNER JOIN table2 t2 ON  t1.id=t2.id

Tu peux essayer ça

8

J'ai essayé avec ce moyen et ça fonctionne bien:

UPDATE 
  Emp
SET 
  ID = 123, 
  Name = 'Peter' 
FROM 
  Table_Name
2
Peter

en voici un qui fonctionne:

UPDATE  `table_1`
INNER JOIN 
 `table_2` SET  col1= value, col2= val,col3= val,col4= val;

valeur est la colonne de la table_2

1
Dragos Custura

Si vous avez besoin de ressaisir cela plusieurs fois, vous pouvez faire comme je l'ai fait une fois. Obtenez les noms de vos colonnes en rangées dans la feuille Excel (écrivez à la fin de chaque nom de colonne (=, ce qui est facile dans Notepad ++)) à droite, créez une colonne pour copier-coller votre valeur qui correspondra aux nouvelles entrées de chaque colonne. Ensuite, à droite 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, puis exécuter

Je ne connais pas de solution plus facile

0
Mohamed Bekheit