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?
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à.
Essaye ça:
INSERT INTO newTable SELECT * FROM initial_Table
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
De ici:
SELECT *
INTO new_table_name [IN externaldatabase]
FROM old_tablename
Il existe un moyen plus simple de ne taper aucun code (idéal pour les tests ou les mises à jour ponctuelles):
Étape 1
Étape 2
Étape 3
Étape 4
Étape 5
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
Vous pouvez utiliser une instruction select into
. Voir plus à W3Schools .
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.
Je pense que cette déclaration pourrait faire ce que vous voulez.
INSERT INTO newTableName (SELECT column1, column2, column3 FROM oldTable);
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")