2016-08-24 1 views
0

J'ai une table avec beaucoup d'enregistrements (pourrait être plus de 500 000 ou 1 000 000). Je souhaite mettre à jour certaines colonnes communes avec le même nom de champ dans toutes les tables de la base de données.Un moyen efficace pour mettre à jour tous les enregistrements de toutes les tables de la base de données dans une seule requête

Je connais la manière traditionnelle d'écrire des requêtes séparées pour des tables individuelles mais pas une requête pour mettre à jour tous les enregistrements de toutes les tables.

Quel est le moyen le plus efficace de le faire en SQL, sans utiliser certaines fonctionnalités spécifiques au dialecte, pour qu'il fonctionne partout (Oracle, MSSQL, MySQL, PostGre, etc.)?

INFORMATIONS SUPPLÉMENTAIRES: Il n'y a pas de champs calculés. Il y a des index. Les instructions SQL générées utilisées mettent à jour la table ligne par ligne.

+0

C'est une chose étrange à vouloir faire. – Strawberry

+0

** SELECT SUM (TABLE_ROWS) FROM INFORMATION_SCHEMA.TABLES O WH TABLE_SCHEMA = '{votre_db}'; ** C'est la manière de parcourir toutes les tables à partir d'une base de données. J'ai essayé de la même manière. Peut-être qu'il me manque quelque chose. – rahulsm

Répondre

2

(Cela ressemble au cas classique pour normalisant que « colonne ».)

Quoi qu'il en soit ... Non, il n'y a pas de requête unique pour localiser cette colonne dans toutes les tables, puis effectuez une UPDATE sur chacun des les tables.

En MySQL, vous pouvez utiliser la table information_schema.COLUMNS pour localiser toutes les tables contenant une colonne nommée particulière. Avec un tel SELECT, vous pouvez générer (en utilisant CONCAT(), etc) les instructions UPDATE désirées. Mais alors, vous devez les exécuter manuellement (via copier et coller). D'accord, vous pouvez probablement écrire une procédure stockée pour l'intégrer dans un seul appel, mais c'est trop risqué. Que faire si une autre table a le même nom de colonne, mais ne doit pas être mise à jour?

Comme pour le code commun à travers plusieurs fournisseurs - oubliez-le! Pratiquement chaque syntaxe a besoin d'une certaine quantité de peaufinage.

+0

Son l'exigence de mettre à jour toutes les tables avec la condition de mettre à jour tous les enregistrements de toutes les tables avec "Activer" l'état et le changer à l'état "Actif". Oui, la procédure stockée peut fonctionner. En tout cas merci !!! – rahulsm