Insert into depuis un Select avec SQL Server

Comment écrire une requête Insert into depuis un Select avec SQL Server? Trois solutions pour lancer une requête INSERT INTO avec un SELECT dans SQL Server. La première solution est d’insérer les données avec une requête SELECT qui retourne les informations en dur. La deuxième est d’utiliser un SELECT et un UNION ALL pour regrouper plusieurs lignes en une seule instructions INSERT. La troisième est d’utiliser un SELECT qui récupère les données d’une autre table, dans notre cas nous utilisons la même table. 

 

Trois exemples de requêtes Insert into depuis un select avec SQL Server

Tout d’abord, pour utiliser les trois exemples insert into, faire un copier/coller dans SQL Server Management Studio. Puis adapter les requêtes avant de les lancer.

Lancer au préalable la requête de création de la table CLIENTS qui est la table cible de nos exemples.

IF exists( SELECT 1 FROM sys.objects WHERE object_id = object_id(N'[dbo].[CLIENTS]') AND type in (N'U') )
DROP TABLE [dbo].[CLIENTS];

Pour aller plus loin d’autres exemples SQL Server avec la table des clients sont disponibles ici.

Pour commencer, créer la table CLIENTS avec la colonne NOM déclarée comme unique pour ne pas insérer deux fois le même nom de client. Le numéro de client NOCLIENT est auto-incrémentée pour avoir une liste suivie de de numéros de clients.

CREATE TABLE [dbo].[CLIENTS] (
[NOCLIENT] int IDENTITY(1,1),
[NOM] nvarchar(20) UNIQUE,
[VILLE] nvarchar(20)
);

 

Première solution: Insertion des données avec une requête SELECT simple qui liste les champs à insérer dans l’ordre.

La première solution est la plus simple et la plus facile à mettre en place, surtout si on maîtrise l’édition de plusieurs lignes en colonnes, avec Excel par exemple.

INSERT INTO dbo.CLIENTS ( NOM, VILLE ) SELECT N'MAMMADOU', 'Lyon';
INSERT INTO dbo.CLIENTS ( NOM, VILLE ) SELECT N'SERGEI', 'Lyon';
INSERT INTO dbo.CLIENTS ( NOM, VILLE ) SELECT N'CHRISTOPHE', 'Paris';

 

Deuxième solution: Insertion des données avec une requête SELECT et un UNION ALL qui regroupe les 3 lignes.

Par ailleurs, cette solution permet de lire facilement les données insérées car elles proviennent d’une simple sélection combinée avec des unions de lignes.

INSERT INTO dbo.CLIENTS ( NOM, VILLE )
SELECT N'BOUBAKAR', 'Marseille'
UNION ALL
SELECT N'IVAN', 'Marseille'
UNION ALL
SELECT N'KARIM', 'Nantes';

 

Troisième solution: INSERT INTO à partir de la même table, les lignes sont donc doublées.

Ajouter le suffixe “-Junior” pour différencier les lignes. En effet, pour permettre l’insertion sans erreur à cause de la contrainte UNIQUE ajoutée sur la colonne NOM. 

En d’autres termes, il n’est pas possible d’avoir des doublons sur la colonne NOM.

INSERT INTO dbo.CLIENTS ( NOM, VILLE )
SELECT NOM + '-Junior', VILLE
from dbo.CLIENTS;

 

Pour finir, vérifier toutes les lignes soit six lignes déjà présentes et six nouvelles lignes de données insérées.

SELECT * FROM dbo.CLIENTS;

Clients insérés dans la table cible après insert into depuis une requête Select

D’autre part, le langage T-SQL permet aussi de manipuler des requêtes d’insertion de données avec des variables.

Soyez le premier à commenter

Laisser un commentaire