SQL Server INSERT INTO avec une requête SELECT

Quelle syntaxe pour faire un INSERT INTO avec une requête SELECT sous SQL Server ? Plusieurs solutions et plusieurs options 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. 

3 exemples de requêtes SQL Server INSERT INTO utilisant un SELECT comme source

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.

1. Création de 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)
);

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

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

4. 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 et éviter une 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