sql plusieurs insert sur une table, en bouclant/itération sur une autre table?
J'ai deux table "TempStore" et "Store" avec la même colonne appelée "Objets".
Il existe des données dans "TempStore" à la table dont j'ai besoin pour aller à "Stocker" la table qui nécessite quelques modifications.
J'ai besoin pour effectuer une itération sur "TempStore de données" (c'est à dire des éléments) et l'insérer dans le Magasin...
Plus précisément: Comment puis-je effectuer une itération sur TempStore (en sql) où "pour chaque élément dans 'TempStore" j'ai besoin de stocker 2 ou peut-être 3 éléments dans 'Store' avec peu de modification", comment puis-je y arriver?
Ce que je veux faire est de prendre chaque rowdata "SELECT * from TempStore]" et insérez les trois dossiers dans "Store" avec la possibilité de changer les "éléments"
Disons TempStore table a {Articles, de Coût, de Prix, ActualCost, ActualPrice} Mais dans le Magasin de la table-je besoin de stocker {Articles, de Coûts, de Prix}. Le ActualCost et ActualPrice de TempStore datarow devra être ajouté comme une autre ligne dans le Magasin....(J'espère que cela a un sens)....De toute façon, est la solution à l'aide de "TOUT-début-FIN"??
OriginalL'auteur VoodooChild | 2010-06-29
Vous devez vous connecter pour publier un commentaire.
essayer INSÉREZ-SÉLECTIONNEZ:
il suffit de faire le SÉLECTIONNER retourner une ligne pour chaque insertion, et de produire les valeurs dans les Colonnes dont vous avez besoin. Vous pourriez avoir besoin
CASE
et une jointure avec une autre table pour faire les lignes supplémentaires.MODIFIER sur la base des observations, OP voulais voir le tableau de nombres dans l'action
vous pouvez même utiliser un SYNDICAT:
soit la table de Nombres ou de l'UNION, nous FAÇON de mieux qu'une boucle!
merci c'est super, mais comment puis-je insérer des enregistrements de 3 à Stocker pour chaque rowdata dans TempStore?
Que diriez-vous simplement de l'exécution de l'instruction SQL trois fois? Ou de le répéter, l'envelopper de l'INSERT, SÉLECTIONNEZ en un TOUT-début-FIN.
créer un tableau de nombres: stackoverflow.com/questions/1393951/... et vous pouvez vous joindre à TempStore. Après la création de la table de Nombres, l'ajouter à la sélection:
INNER JOIN Numbers N ON n.Number<=3
jamais de la boucle si vous n'avez pas à, jeu de base est la manière la plus rapide et la meilleure façon d'aller dans une base de données
OriginalL'auteur KM.
OK, je pense KM a proposé une excellente solution d'un "tableau de nombres". Cependant, VoodooChild a demandé dans un commentaire que je poste un exemple de code de ma suggestion de à l'aide de TOUT-BEGIN-END autour d'un INSERT, SELECT.
J'ai créé deux tables comme VoodooChild Magasin et TempStore.
Magasin a des colonnes StoreID, StoreName, StoreState, StoreNumber.
TempStore a des colonnes TempStoreID, TempStoreName.
Je préenregistrés TempStoreName avec les valeurs de la Première, Deuxième, Troisième et Quatrième.
Maintenant, mon SQL insérez trois enregistrements dans la table de banque pour chaque enregistrement dans la TempStore table qui répond à la condition de la clause where. Cette condition est la longueur de la TempStoreName, évidemment pas d'un exemple réel.
Le résultat de ce lorsqu'il est appliqué à une banque vide de table est:
Donc, cette approche fonctionne. Il semble répondre à VoodooChild besoins. Il peut ou peut ne pas être le meilleur choix, mais il y a d'autres facteurs qui interviennent dans la décision que nous ne savons pas, comme le nombre de fois que cette opération est répétée.
oups, je vois qu'KM déjà mis à jour sa réponse à l'aide de numéros de table...je vais le regarder et de voir celui qui a plus de sens. Merci beaucoup pour votre aide, vous êtes géniaux
DONC a vraiment bien travaillé pour vous ici. Vous avez le choix entre deux très bonnes approches. Je pense qu'KM de la solution est plus élégante, si cela fonctionne pour vous.
Oui, j'ai juste essayé Numéro de l'approche de Table dans ma réelle solution et qu'il fonctionne bien mieux que la lecture en boucle et c'est tellement simple à suivre - je suis très heureux de venir à travers elle, il est parfait. Merci beaucoup encore une fois, pour vraiment apprécier l'aider. cheers 🙂
OriginalL'auteur DOK
La déclaration ci-dessus va insérer deux lignes dans le magasin pour chaque ligne de la TempStore. Vous pouvez modifier l'SÉLECTIONNEZ * pour toute modification que vous souhaitez apporter à l'article.
OriginalL'auteur Alex W
Compte tenu de votre commentaire, ce qui devrait vous donner ce dont vous avez besoin. Vous devez probablement avoir un moyen de différencier les valeurs dans vos Magasins table une fois qu'ils y arrivent. Peut-être un "véritable" colonne de BITS ou quelque chose de similaire:
Si vous avez besoin d'ajuster les colonnes (par exemple, augmentation de actual_price de 10%) alors que vous pourriez faire ceci:
J'ai aussi ajouté une clause where à la deuxième instruction SELECT pour montrer que vous pouvez filtrer les lignes. Que LORSQUE la clause n'affecte que la deuxième sélection. Donc, vous pourriez aussi le faire:
L'sélectionnez travailler aussi longtemps que les types de données des colonnes de match. Ils pourraient provenir de différentes tables. Je ne suis pas sûr exactement ce que vous entendez par "modifier". Vous pouvez certainement utiliser des fonctions dans les colonnes ci-dessus. Je vais ajouter un bref exemple.
OriginalL'auteur Tom H