Ajout de lignes à l'aide d'INSERT et SELECT

Vous pouvez utiliser les instructions INSERT et SELECT pour ajouter des lignes à une table des manières suivantes :

  • Utilisez l'instruction INSERT pour spécifier des valeurs directement ou à partir d'une sous-requête.

  • Utilisez l'instruction SELECT avec la clause INTO.

Utilisation d'INSERT

L'instruction INSERT permet d'ajouter une ou plusieurs nouvelles lignes à une table. Dans un traitement simplifié, la forme d'INSERT est la suivante :

INSERT [INTO] table_or_view [(column_list)] data_values

L'instruction INSERT insère les data_values sous la forme d'une ou de plusieurs lignes dans la table ou la vue spécifiée. L'argument column_list est une liste de noms de colonnes, séparés par des virgules, qui permet de spécifier les colonnes pour lesquelles les données sont fournies. Si l'argument column_list n'est pas spécifié, toutes les colonnes de la table ou de la vue reçoivent des données.

Lorsqu'un argument column_list ne spécifie pas toutes les colonnes d'une table ou d'une vue, une valeur NULL (ou une valeur par défaut si elle a été définie pour la colonne) est insérée dans toute colonne ne figurant pas dans la liste. Toutes les colonnes non spécifiées dans la liste de colonnes doivent soit admettre des valeurs NULL, soit se voir affecter une valeur par défaut.

Les instructions INSERT ne spécifient pas de valeurs pour les types de colonnes suivants car le Moteur de base de données SQL Server génère les valeurs pour ces colonnes :

  • les colonnes dotées d'une propriété IDENTITY qui génère les valeurs pour la colonne ;

  • les colonnes dotées d'une valeur par défaut qui utilise la fonction NEWID pour générer une valeur GUID unique ;

  • les colonnes calculées.

    Les colonnes calculées sont des colonnes virtuelles définies sous la forme d'une expression calculée à partir d'une ou de plusieurs autres colonnes dans l'instruction CREATE TABLE, telles que :

    CREATE TABLE TestTable
      (ColA INT PRIMARY KEY,
       ColB INT NOT NULL,
       ColC AS (ColA + ColB) * 2);
    

L'exemple suivant montre comment insérer des lignes dans une table dont les colonnes génèrent automatiquement une valeur ou possèdent une valeur par défaut. Les instructions INSERT insèrent des lignes qui contiennent des valeurs pour certaines colonnes mais pas pour toutes. Dans la dernière instruction INSERT, aucune colonne n'est spécifiée et seules les valeurs par défaut sont insérées.

USE AdventureWorks2008R2;
GO
IF OBJECT_ID ('dbo.T1', 'U') IS NOT NULL
    DROP TABLE dbo.T1;
GO
CREATE TABLE dbo.T1 
(
    column_1 AS 'Computed column ' + column_2, 
    column_2 varchar(30) 
        CONSTRAINT default_name DEFAULT ('my column default'),
    column_3 rowversion,
    column_4 varchar(40) NULL
);
GO
INSERT INTO dbo.T1 (column_4) 
    VALUES ('Explicit value');
INSERT INTO dbo.T1 (column_2, column_4) 
    VALUES ('Explicit value', 'Explicit value');
INSERT INTO dbo.T1 (column_2) 
    VALUES ('Explicit value');
INSERT INTO T1 DEFAULT VALUES; 
GO
SELECT column_1, column_2, column_3, column_4
FROM dbo.T1;
GO

Utilisation d'INSERT avec la clause VALUE et une sous-requête SELECT

Les valeurs de données fournies doivent correspondre à la liste de colonnes. Le nombre de valeurs de données doit être identique à celui des colonnes, tandis que le type de données, la précision et l'échelle de chaque valeur de données doivent correspondre à ceux de la colonne correspondante. Vous pouvez spécifier les valeurs des données de différentes manières :

Utilisation de SELECT avec INTO

Pour créer une table à partir de valeurs dans une autre table, vous pouvez utiliser SELECT INTO. Exemple :

SELECT LastName, FirstName, Phone
INTO dbo.PhoneList492
FROM dbo.Customers
WHERE Phone LIKE '492%'

Pour plus d'informations, consultez Insertion de lignes au moyen de l'instruction SELECT INTO.