SQLShack (Français)
Cet article traite de linstruction SQL SELECT INTO, y compris la syntaxe, paramètres et utilisation avec plusieurs tables, groupes de fichiers et une condition WHERE
Nous insérons régulièrement des données dans des tables SQL Server soit à partir dune application, soit directement dans SSMS. Nous pouvons insérer des données à laide de linstruction INSERT INTO. Pour ce faire, nous devrions avoir une table déjà en place pour y insérer des données car nous ne pouvons pas créer une table en utilisant Insert dans linstruction.
Nous devons effectuer les tâches suivantes en utilisant linstruction INSERT INTO.
- Créez une structure de table avec les types de données appropriés
- Insérez des données dedans
Mais la bonne nouvelle est que nous pouvons faire les deux la tâche ensemble, élégamment, à laide de linstruction SQL SELECT INTO. Il crée une structure de table pour les colonnes renvoyées par linstruction Select.
Supposons que nous voulions mettre à jour de nombreux enregistrements dans une table. Nous pouvons utiliser linstruction SELECT INTO pour créer une table de sauvegarde avec la structure existante à partir de la table source. Explorons le SELECT INTO dans cet article.
Syntaxe de linstruction SELECT INTO
1
2
3
4
|
SELECT colonne1, colonne2 .. .ColumnN
INTO New_table
FROM tables
;
|
Paramètres de linstruction SELECT INTO
- Liste des colonnes: nous devons spécifier la colonne que nous voulons récupérer et insérer dans une nouvelle table
- New_table: nous pouvons spécifier le nouveau nom de la table ici. SQL Server crée une nouvelle table avec des colonnes mentionnées dans la liste des colonnes. Nous ne pouvons pas remplacer une table existante en utilisant cela. Le nom de la table doit être unique
- Tables: il contient une table à partir de laquelle nous voulons obtenir des enregistrements. Nous pouvons également définir plusieurs tables ici avec une clause Join appropriée
- Conditions WHERE: nous pouvons filtrer les enregistrements en utilisant la clause Where. Cest une clause facultative
Explorons linstruction SQL SELECT INTO à laide dexemples.
Environnement:
Dans cet exemple, nous utilisons exemple de base de données AdventureWorks2017. Supposons que nous voulions sélectionner des enregistrements de la table et créer une nouvelle table à laide de linstruction SELECT INTO. Nous voulons des colonnes sélectionnées uniquement dans la nouvelle table. Exécutons une instruction select sur la table Employee avec les colonnes que nous voulons avoir.
Avant dexécuter le SQL SELECT INTO , nous pouvons vérifier que la table Employee_Demo nexiste pas dans la base de données AdventureWorks2017 à laide de la commande sp_help.
1
|
sp_help « .. »
|
Dans la capture décran suivante, nous pouvons voir que la table Employee_Demo nexiste pas dans ma base de données.
Exécutez la requête suivante pour créer une nouvelle table à laide de linstruction SELECT INTO.
Nous obtenons le message de sortie suivant dans Azure Data Studio. Vous pouvez noter que le nombre de lignes affectées est de 10. Dans la requête, nous avons sélectionné les 10 premiers enregistrements dune table Employee.
Nous pouvons accéder aux données de la table nouvellement créée Employee_Demo et vérifier quelle contient les mêmes enregistrements que notre instruction select précédente.
Nous navons spécifié aucune propriété de colonne dans linstruction SQL SELECT INTO. Comparons les colonnes des tables source et destination et leurs propriétés.
Nous pouvons exécuter la commande sp_help ‘tablename’ sur les tables Employee et Employee_Demo. Jai copié la sortie des deux tables dans Excel (pour les colonnes sélectionnées). Dans la capture décran suivante, vous pouvez voir que le type de données de colonne et leurs propriétés sont similaires.
Dans linstruction SQL SELECT INTO précédente , nous avons préparé une table de destination (Employee_Demo) à partir de quelques colonnes de la table source (Employee).
Créons une autre table avec toutes les colonnes dune table Employee avec la requête suivante.
Dans la sortie, nous pouvons le voir inséré 290 lignes dans la table Employee_All.
Nous avons vérifié que le SELECT INTO crée une nouvelle table avec des colonnes spécifiées dans la liste de colonnes. Il crée également un type de données similaire dans la table de destination.
Supposons que nous ayons des clés primaires et étrangères dans la table source. Crée-t-il une clé primaire et une clé étrangère également similaires à la table source? Non, linstruction SQL SELECT INTO ne crée aucune clé dans la table de destination. Si nous le voulons, nous pouvons définir des clés sur la table de destination. Vérifions cela dans la section suivante.
Dans mon exemple précédent, la table Employee contient des clés primaires et étrangères définies dessus. Nous pouvons obtenir une liste des clés existantes en utilisant la vue INFORMATION_SCHEMA. Exécutez le code suivant et il renvoie les clés primaires et étrangères existantes dans la table Employee.
Nous pouvons voir que la table Employee contient des clés primaires et étrangères.
Nous avons copié toutes les colonnes de Employee_All à partir de la table Employee. Nous devons vérifier la clé primaire et étrangère sur la table de destination maintenant.
Nous pouvons voir quelle ne contient aucune clé dans la table de destination. Cela nous donne la flexibilité de définir des clés sur la table de destination.
SQL SELECT INTO – Insérer des données à partir de plusieurs tables
Dans les exemples précédents, nous avons créé un tableau à laide de linstruction SELECT INTO à partir dune seule table Employee. Nous pouvons également joindre plusieurs tables et utiliser linstruction SELECT INTO pour créer également une nouvelle table avec des données. Dans cette section, nous voulons joindre plusieurs tables ensemble. Dans la requête suivante, nous avons joint les tables suivantes dans AdventureWorks2017.
Exécutez la requête suivante. Il donne les résultats de plusieurs tables en fonction de la condition de jointure et des colonnes mentionnées.
Exécutez une requête, et nous suivons la sortie de linstruction SQL SELECT INTO.
Nous voulons créer un tableau avec les données renvoyées en utilisant le tableau ci-dessus. Exécutons linstruction SQL SELECT INTO.
Elle crée. table et insérez-y des données. Nous pouvons vérifier les enregistrements de cette table par linstruction de sélection.
Nous pouvons voir que vous pouvez joindre plusieurs tables ensemble et créer une sortie table en utilisant linstruction SELECT INTO.
Nous navons pas besoin de nous occuper de définir les types de données pour la table de destination. Si nous voulons créer une table manuellement, nous devons examiner le type de données de chaque colonne et définir le type de données en conséquence. En cas de non-concordance entre les types de données, vous pouvez recevoir un message derreur du type suivant.
Erreur 1: en raison dune non-concordance dans les types de données
Msg 245, niveau 16, état 1 , Ligne 1
La conversion a échoué lors de la conversion de la valeur varchar GG en type de données int.
Erreur 2: Msg 8152, niveau 16, état 30, ligne 2
Chaîne ou les données binaires seraient tronquées.
Nous nobtenons pas ces erreurs lors de linsertion de données à laide de linstruction SQL SELECT INTO. Cependant, nous ne pouvons pas insérer de données dans des tables existantes en utilisant cette méthode.
SELECT INTO – Spécifier le groupe de fichiers
Dans les sections précédentes, nous avons exploré la possibilité de créer une nouvelle table et dy insérer des données à laide de linstruction SQL SELECT INTO à partir de tables existantes. Il crée une table dans le groupe de fichiers par défaut uniquement. Nous ne pouvons pas spécifier un groupe de fichiers particulier avant SQL Server 2016. Dans SQL Server 2017, nous pouvons spécifier un groupe de fichiers particulier dans lequel une nouvelle table doit être créée. SQL Server crée une nouvelle table dans ce groupe de fichiers de table de vérification particulier. Si nous ne spécifions aucun groupe de fichiers dans SQL Server 2017 et versions ultérieures, cela crée une table dans le groupe de fichiers par défaut.
Remarque: nous ne pouvons pas spécifier de groupes de fichiers dans SQL SELECT INTO pour SQL Server 2016 et versions antérieures.
Ajoutons un nouveau groupe de fichiers dans la base de données AdventureWorks2017. Faites un clic droit sur la base de données et accédez à Groupes de fichiers.
Dans cette page de groupe de fichiers, cliquez sur Ajouter un groupe de fichiers et spécifiez un nom pour le groupe de fichiers.
Maintenant, cliquez sur Fichiers et il répertorie les fichiers de base de données existants (données et fichier journal), dans cette page, ajoutez un nouveau fichier de données et spécifiez FileGroup dans la liste déroulante. Cela devrait être FileGroup que nous venons de créer.
Nous voulons créer une table SQL dans INSERTFILE Filegroup. Nous navons pas défini ce groupe de fichiers comme groupe de fichiers par défaut.
Dans la requête suivante, vous pouvez voir que nous avons spécifié le nom du groupe de fichiers en utilisant la clause ON. Cela fonctionne de manière similaire à une instruction SQL SELECT INTO classique avec une différence dans un groupe de fichiers.
1
2
3
|
sélectionnez * dans person.person_temp
ON INSERTFILE –FILEGROUP NAME
from person.person
|
Une fois la table créée, exécutez une commande sp_help sur cette table nouvellement créée. Dans la capture décran suivante, nous pouvons vérifier que la table se trouve sur INSERTFILE FileGroup. Cest le FileGroup que nous avons créé précédemment.
Nous pouvons également vérifier cela à partir des propriétés de la table. Cliquez avec le bouton droit sur une table dans SSMS. Dans la section Stockage, nous pouvons voir le groupe de fichiers souhaité.
SELECT INTO avec une condition Where
Supposons que nous voulions créer une table avec une instruction SQL SELECT INTO contenant peu denregistrements. Nous pouvons utiliser une clause Where similaire à une instruction select.Dans la requête suivante, nous voulons créer une table person.person_WC pour la personne dont le nom de famille est comme% Duf%.
1
2
3
4
|
sélectionnez * dans person.person_WC
ON INSERTFILE – Vérifiez la table Filegroup
de person.person
où Lastname comme « % Duf% »
|
Conclusion
Dans cet article, nous avons exploré le SQL Instruction SELECT INTO et ses scénarios dutilisation. Cest une commande utile pour créer une copie dune table sans spécifier de types de données.
- Auteur
- Messages récents
Il est le créateur de lune des plus grandes collections darticles en ligne gratuits sur un seul sujet, avec sa série de 50 articles sur les groupes de disponibilité Always On SQL Server. Sur la base de sa contribution à la communauté SQL Server, il a été récompensé par divers prix dont le prestigieux « Meilleur auteur de lannée » en continu en 2020 et 2021 chez SQLShack.
Raj est toujours intéressé par de nouveaux défis, donc si vous avez besoin de conseil aide sur tous les sujets traités dans ses écrits, il peut être contacté à [email protected]
Voir tous les articles de Rajendra Gupta
- Mise à niveau des versions mineures et majeures pour AWS RDS SQL Server – 29 janvier 2021
- Déploiement des instances AWS RDS PostgreSQL – 27 janvier 2021
- Migration de vos bases de données SQL sur site vers AWS RDS SQL Server à laide dAWS DMS – 25 janvier , 2021