J'essaye d'insérer toutes les valeurs d'une table dans une autre. Mais l'instruction insert accepte les valeurs, mais je voudrais qu'elle accepte un select * de la table_initial. Est-ce possible?
J'essaye d'insérer toutes les valeurs d'une table dans une autre. Mais l'instruction insert accepte les valeurs, mais je voudrais qu'elle accepte un select * de la table_initial. Est-ce possible?
L'instruction insert a en fait une syntaxe pour faire exactement cela. C'est beaucoup plus facile si vous spécifiez les noms de colonnes plutôt que de sélectionner "*":
INSERT INTO new_table (Foo, Bar, Fizz, Buzz)
SELECT Foo, Bar, Fizz, Buzz
FROM initial_table
-- optionally WHERE ...
Je ferais mieux de clarifier cela parce que pour une raison quelconque, ce message reçoit quelques votes négatifs.
La syntaxe INSERT INTO ... SELECT FROM est utilisée lorsque la table dans laquelle vous insérez ("new_table" dans mon exemple ci-dessus) existe déjà. Comme d'autres l'ont dit, la syntaxe SELECT ... INTO est utilisée lorsque vous souhaitez créer la nouvelle table dans le cadre de la commande.
Vous n'avez pas spécifié si la nouvelle table doit être créée dans le cadre de la commande, donc INSERT INTO ... SELECT FROM devrait convenir si votre table de destination existe déjà.
Essaye ça:
la source
Vous pouvez insérer à l'aide d'une sous-requête comme suit:
la source
D' ici:
la source
Vous pouvez utiliser une
select into
instruction. En savoir plus sur W3Schools .la source
Il existe un moyen plus simple de ne pas saisir de code (idéal pour les tests ou les mises à jour ponctuelles):
Remarque - 1 : Si les colonnes ne sont pas dans le bon ordre comme dans le tableau cible, vous pouvez toujours suivre l'étape 2 et sélectionner les colonnes dans le même ordre que dans le tableau cible
Remarque - 2 - Si vous avez des colonnes d'identité, exécutez
SET IDENTITY_INSERT sometableWithIdentity ON
puis suivez les étapes ci-dessus et, à la fin, exécutezSET IDENTITY_INSERT sometableWithIdentity OFF
la source
Si vous transférez un grand nombre de données de manière permanente, c'est-à-dire ne remplissez pas une table temporaire, je vous recommande d'utiliser SQL Server Import / Export Data pour les mappages table à table.
L'outil d'importation / exportation est généralement meilleur que SQL simple lorsque vous avez des conversions de type et une troncature de valeur possible dans votre mappage. En général, plus votre mappage est complexe, plus vous utilisez un outil ETL comme Integration Services (SSIS) au lieu de SQL direct.
L'outil d'importation / exportation est en fait un assistant SSIS et vous pouvez enregistrer votre travail en tant que package dtsx.
la source
Je pense que cette déclaration pourrait faire ce que vous voulez.
la source
la source