INSERT INTO avec SQL Server

Quelle syntaxe pour faire un INSERT INTO avec une requête SELECT sous 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. 

Comment écrire une requête INSERT INTO à partir d’un SELECT avec SQL Server?

Pour utiliser les 3 exemples, il vous suffit de faire un copier/coller dans SQL Server Management Studio et de lancer les requêtes. Lancer au préalable la requête de création de la table CLIENTS.

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.

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.

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, nous ajoutons 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, nous ne pouvons avoir de 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 6 lignes déjà présentes et 6 nouvelles insérées.

SELECT * FROM dbo.CLIENTS;

Soyez le premier à commenter

Laisser un commentaire