web-dev-qa-db-fra.com

Comment mettre à jour toutes les colonnes d'un enregistrement sans avoir à lister chaque colonne

J'essaie de savoir s'il existe un moyen de mettre à jour un enregistrement sans avoir à lister chaque nom de colonne à mettre à jour. 

Par exemple, ce serait bien si je pouvais utiliser quelque chose de similaire à:

// the parts inside braces are what I am trying to figure out
UPDATE Employee
SET {all columns, without listing each of them} 
WITH {this record with id of '111' from other table}
WHERE employee_id = '100'

Si cela peut être fait, quel serait le moyen le plus simple/efficace d'écrire une telle requête?

17
BinaryCat

Ce n'est pas possible. 

Ce que vous essayez de faire ne fait pas partie de la spécification SQL et n’est pris en charge par aucun fournisseur de base de données. Voir les spécifications des instructions SQL UPDATE pour MySQL , Postgresql , MSSQL , Oracle , Firebird , Teradata . Chacun de ceux-ci ne prend en charge que la syntaxe suivante:

UPDATE table_reference
   SET column1 = {expression} [, column2 = {expression}] ...
[WHERE ...]
19
npe

Ce n'est pas posible, mais ..

tu peux le faire:

begin tran
delete from table where CONDITION
insert into table select * from EqualDesingTabletoTable where CONDITION
commit tran

soyez prudent avec les champs d'identité.

3
R.Alonso

Pourquoi ne pas utiliser Merge?

https://technet.Microsoft.com/en-us/library/bb522522(v=sql.105).aspx

Il vous donne la possibilité d'exécuter Insertion, Mise à jour et Suppression. Un autre conseil est que, si vous souhaitez mettre à jour un grand ensemble de données avec des index et que le sous-ensemble source est plus petit que votre cible, mais que les deux tables sont très volumineuses, déplacez d'abord les modifications dans une table temporaire. J'ai essayé de fusionner deux tables de près de deux millions de lignes chacune et 20 enregistrements ont pris 22 minutes. Une fois que j'ai déplacé les deltas sur une table temporaire, cela a pris quelques secondes. 

1
Michael

vous pouvez le faire en supprimant la colonne de la table, en la rajoutant et en lui ajoutant une valeur par défaut. puis enregistrer cela nécessitera de reconstruire la table

0
andy wilson