web-dev-qa-db-fra.com

Insérer toutes les valeurs d'une table dans une autre table en SQL

J'essaie d'insérer toutes les valeurs d'une table dans une autre. Mais l’instruction insert accepte les valeurs, mais j’aimerais qu’elle accepte un select * de la table initial_Table. Est-ce possible?

118
Vinod

L'instruction insert a en fait une syntaxe pour cela. C'est beaucoup plus facile si vous spécifiez les noms des colonnes plutôt que de sélectionner "*" bien que:

INSERT INTO new_table (Foo, Bar, Fizz, Buzz)
SELECT Foo, Bar, Fizz, Buzz
FROM initial_table
-- optionally WHERE ...

Je ferais mieux de clarifier ceci parce que, pour une raison quelconque, ce message suscite 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 déjà dit, la syntaxe SELECT ... INTO vous permet de 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. INSERT INTO ... SELECT FROM devrait donc être correct si votre table de destination existe déjà.

252
Matt Hamilton

Essaye ça:

INSERT INTO newTable SELECT * FROM initial_Table
19
FibreCode

Vous pouvez insérer à l'aide d'une sous-requête comme suit:

INSERT INTO new_table (columns....)
SELECT columns....
FROM initial_table where column=value
12
sornalingam

De ici:

SELECT *
INTO new_table_name [IN externaldatabase] 
FROM old_tablename
6
Otávio Décio

Il existe un moyen plus simple de ne taper aucun code (idéal pour les tests ou les mises à jour ponctuelles):

Étape 1

  • Faites un clic droit sur la table dans l'explorateur et sélectionnez "Editer les 100 premières lignes";

Étape 2

  • Ensuite, vous pouvez sélectionner les lignes de votre choix ( Ctrl + clic ou Ctrl + A ), puis cliquez avec le bouton droit de la souris et copiez (Remarque: Si vous souhaitez ajouter une condition "", Clic droit sur Grille -> Volet -> SQL Vous pouvez maintenant éditer la requête et ajouter la condition WHERE, puis faire un clic droit à nouveau -> Exécuter SQL, vos lignes requises seront disponibles pour une sélection en bas)

Étape 3

  • Suivez l'étape 1 pour la table cible.

Étape 4

  • Maintenant, allez à la fin de la grille et la dernière ligne aura un astérisque (*) dans la première colonne (Cette ligne doit ajouter une nouvelle entrée). Cliquez dessus pour sélectionner toute la ligne, puis PASTE ( Ctrl + V ). La cellule peut avoir un astérisque rouge (indiquant qu'elle n'est pas enregistrée)

Étape 5

  • Cliquez sur n'importe quelle autre ligne pour déclencher l'instruction d'insertion (l'astreix rouge disparaîtra)

Remarque - 1: Si les colonnes ne sont pas dans le bon ordre comme dans la table cible, vous pouvez toujours suivre l'étape 2 et sélectionner les colonnes dans le même ordre que dans la table cible.

Remarque - 2 - Si vous avez des colonnes Identity, exécutez SET IDENTITY_INSERT sometableWithIdentity ON puis suivez les étapes ci-dessus, puis exécutez SET IDENTITY_INSERT sometableWithIdentity OFF

4
Mahesh

Vous pouvez utiliser une instruction select into. Voir plus à W3Schools .

4
Joe Skora

Si vous transférez de manière permanente un grand nombre de données, c’est-à-dire que vous ne remplissez pas une table temporaire, je vous recommande d’utiliser Données d'importation/exportation SQL Server pour les mappages de table à table.

L'outil d'importation/exportation est généralement meilleur que le SQL direct 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 d'un SQL direct.

L'outil d'importation/exportation est en réalité un assistant SSIS et vous pouvez enregistrer votre travail sous forme de package DTS.

3
mika

Je pense que cette déclaration pourrait faire ce que vous voulez.

INSERT INTO newTableName (SELECT column1, column2, column3 FROM oldTable);
2
Chris Ballance
 Dim ofd As New OpenFileDialog
                ofd.Filter = "*.mdb|*.MDB"
                ofd.FilterIndex = (2)
                ofd.FileName = "bd1.mdb"
                ofd.Title = "SELECCIONE LA BASE DE DATOS ORIGEN (bd1.mdb)"
                ofd.ShowDialog()
                Dim conexion1 = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" + ofd.FileName
                Dim conn As New OdbcConnection()
                conn.ConnectionString = conexion1
                conn.Open()



            'EN ESTE CODIGO SOLO SE AGREGAN LOS DATOS'
            Dim ofd2 As New OpenFileDialog
            ofd2.Filter = "*.mdb|*.MDB"
            ofd2.FilterIndex = (2)
            ofd2.FileName = "bd1.mdb"
            ofd2.Title = "SELECCIONE LA BASE DE DATOS DESTINO (bd1.mdb)"
            ofd2.ShowDialog()
            Dim conexion2 = "Driver={Microsoft Access Driver (*.mdb)};DBQ=" + ofd2.FileName
            Dim conn2 As New OdbcConnection()
            conn2.ConnectionString = conexion2
            Dim cmd2 As New OdbcCommand
            Dim CADENA2 As String

            CADENA2 = "INSERT INTO EXISTENCIA IN '" + ofd2.FileName + "' SELECT * FROM EXISTENCIA IN '" + ofd.FileName + "'"


            cmd2.CommandText = CADENA2
            cmd2.Connection = conn2
            conn2.Open()
            Dim dA2 As New OdbcDataAdapter
            dA2.SelectCommand = cmd2
            Dim midataset2 As New DataSet
            dA2.Fill(midataset2, "EXISTENCIA")
0
JORGE