Requête SQL Server Insert Into depuis un Select

Comment écrire une requête d’insertion de type Insert Into depuis un Select avec SQL Server ?

Trois solutions pour écrire et exécuter une requête SQL Server de type Insert Into depuis un Select. 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.

Vérifier la présence de la table des clients et la supprimer

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, voici d’autres tutoriels avec des exemples SQL Server pour créer une table. 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é pour avoir une liste suivie de numéros de clients.

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

Insérer des données avec une requête SELECT pour chaque ligne

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';

Insérer des données avec une requête SELECT et UNION ALL pour regrouper des 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';

Requête INSERT INTO depuis la même table pour doubler les lignes

Ainsi cette requête permet de facilement ajouter le suffixe -Junior pour différencier les lignes en double. 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;

Vérifier les lignes insérées dans la table des 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;
Résultat de la Requête SQL Server Insert Into depuis un Select
Résultat de la Requête SQL Server Insert Into depuis un Select

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

Soyez le premier à commenter

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée.


*