Recherche…


Introduction

L'instruction INSERT INTO est utilisée pour insérer de nouveaux enregistrements dans une table.

INSERT Hello World INTO table

CREATE TABLE MyTableName
(
    Id INT,
    MyColumnName NVARCHAR(1000)
)
GO

INSERT INTO MyTableName (Id, MyColumnName)
VALUES (1, N'Hello World!')
GO    

INSERT sur des colonnes spécifiques

Pour effectuer une insertion sur des colonnes spécifiques (par opposition à toutes), vous devez spécifier les colonnes que vous souhaitez mettre à jour.

INSERT INTO USERS (FIRST_NAME, LAST_NAME)
VALUES ('Stephen', 'Jiang');

Cela ne fonctionnera que si les colonnes que vous n'avez pas listées sont nullables, identité, type de données d'horodatage ou colonnes calculées; ou des colonnes qui ont une contrainte de valeur par défaut. Par conséquent, si l'une de ces colonnes est non nullable, sans identité, sans horodatage, non calculée, sans valeur par défaut ... alors la tentative de ce type d'insert déclenche un message d'erreur indiquant que vous devez fournir un valeur pour le ou les champs applicables.

INSÉRER plusieurs lignes de données

Pour insérer plusieurs lignes de données dans SQL Server 2008 ou version ultérieure:

INSERT INTO USERS VALUES
(2, 'Michael', 'Blythe'),
(3, 'Linda', 'Mitchell'),
(4, 'Jillian', 'Carson'),
(5, 'Garrett', 'Vargas');

Pour insérer plusieurs lignes de données dans les versions antérieures de SQL Server, utilisez "UNION ALL" comme suit:

INSERT INTO USERS (FIRST_NAME, LAST_NAME)
SELECT 'James', 'Bond' UNION ALL
SELECT 'Miss', 'Moneypenny' UNION ALL
SELECT 'Raoul', 'Silva'

Notez que le mot clé "INTO" est facultatif dans les requêtes INSERT. Un autre avertissement est que le serveur SQL ne prend en charge que 1000 lignes dans un INSERT, vous devez donc les diviser en lots.

INSÉRER une seule ligne de données

Une seule ligne de données peut être insérée de deux manières:

INSERT INTO USERS(Id, FirstName, LastName)
VALUES (1, 'Mike', 'Jones');

Ou

INSERT INTO USERS
VALUES (1, 'Mike', 'Jones');

Notez que la deuxième instruction d'insertion n'autorise les valeurs que dans le même ordre que les colonnes de la table, alors que dans la première insertion, l'ordre des valeurs peut être modifié comme suit:

INSERT INTO USERS(FirstName, LastName, Id)
VALUES ('Mike', 'Jones', 1);

Utilisez OUTPUT pour obtenir le nouvel identifiant

Lorsque INSERTing, vous pouvez utiliser OUTPUT INSERTED.ColumnName pour obtenir des valeurs à partir de la nouvelle ligne insérée, par exemple le nouvel ID généré, utile si vous avez une colonne IDENTITY ou toute sorte de valeur par défaut ou calculée.

Lorsque vous appelez ceci par programmation (par exemple, depuis ADO.net), vous le traitez comme une requête normale et lisez les valeurs comme si vous aviez fait une SELECT .

-- CREATE TABLE OutputTest ([Id] INT NOT NULL PRIMARY KEY IDENTITY, [Name] NVARCHAR(50))

INSERT INTO OutputTest ([Name])
OUTPUT INSERTED.[Id]
VALUES ('Testing')

Si l'ID de la ligne récemment ajoutée est requis dans le même ensemble de requêtes ou de procédures stockées.

-- CREATE a table variable having column with the same datatype of the ID

DECLARE @LastId TABLE ( id int);

INSERT INTO OutputTest ([Name])
OUTPUT INSERTED.[Id] INTO @LastId
VALUES ('Testing')

SELECT id FROM @LastId

-- We can set the value in a variable and use later in procedure

DECLARE @LatestId int = (SELECT id FROM @LastId)

INSERT from SELECT Résultats de la requête

Pour insérer des données extraites d'une requête SQL (une ou plusieurs lignes)

INSERT INTO Table_name (FirstName, LastName, Position)
SELECT FirstName, LastName, 'student' FROM Another_table_name

Notez que «étudiant» dans SELECT est une constante de chaîne qui sera insérée dans chaque ligne.

Si nécessaire, vous pouvez sélectionner et insérer des données depuis / dans la même table



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow