Demande SQL d'ajout. Transact-SQL - Insertion de données. Les demandes SQL les plus simples

L'opérateur d'insertion insère de nouvelles entrées à la table. Dans ce cas, les valeurs des colonnes peuvent être des constantes littérales ou être le résultat de la sous-requête. Dans le premier cas, un opérateur d'insertion séparé est utilisé pour insérer chaque chaîne; Dans le second cas, de nombreuses lignes seront insérées que la sous-requête est renvoyée.

La syntaxe de l'opérateur est la suivante:

    INSÉRER DANS [(, ...)]

    (Valeurs (, ...))

  1. | Les valeurs par défaut)

Comme on peut le voir à partir de la syntaxe présentée, la liste des colonnes n'est pas obligatoire (elles disent des crochets dans la description de la syntaxe). Dans le cas où il manque, la liste des valeurs insérées doit être complète, c'est-à-dire de fournir des valeurs pour toutes les colonnes de la table. Dans ce cas, l'ordre des valeurs doit correspondre à la commande spécifiée par l'instruction Créer une table pour la table dans laquelle les lignes sont insérées. De plus, ces valeurs doivent inclure le même type de données que les colonnes dans lesquelles elles sont entrées. Par exemple, envisagez l'insertion de la chaîne dans la table des produits créée par l'opérateur de table suivant:

    Créer un produit de table.

    maker Char (1) Not Null,

    modèle varchar (4) non ,

    tapez Varchar (7) Not Null

Devant ajouter à cette table Modèle PC 1157 Fabricant B. Ceci peut être fait par l'opérateur suivant:

    Insérer dans le produit

    Valeurs ("B", 1157, "PC");

Si vous définissez une liste de colonnes, vous pouvez modifier l'ordre «naturel» de leur suivant:

    Insérer dans le produit (type, modèle, fabricant)

    Valeurs ("PC", 1157, "B");

Il semblerait qu'il s'agisse d'une possibilité totalement inutile qui ne fait que la conception que plus encombrante. Cependant, il devient gagnant si les colonnes ont des valeurs par défaut. Considérez la structure suivante de la table:

    Créer une table product_d.

    maker Char (1) NULL,

    modèle varchar (4) ,

    tapez Varcharner (7) Not Null Par défaut "PC"

Notez que les valeurs de toutes les colonnes ont ici les valeurs par défaut (les deux premiers-null et la dernière colonne sont TYPE-PC). Maintenant, nous pourrions écrire:

    Insérer dans le produit_d (modèle, fabricant)

    Valeurs (1157, "B");

Dans ce cas, la valeur manquante lors de l'insertion de la chaîne sera remplacée par la valeur par défaut - PC. Notez que si la valeur par défaut n'est pas spécifiée pour la colonne de l'instruction Créer une table et que la restriction NON NULL n'est pas spécifiée, qui interdit l'utilisation de NULL dans cette colonne de table, la valeur par défaut est NULL.

La question se pose: Puis-je ne pas spécifier la liste des colonnes et, néanmoins, utiliser les valeurs par défaut? La réponse est positive. Pour ce faire, en spécifiant explicitement la valeur de l'utilisation du mot réservé par défaut:

    Insérer dans le produit_d.

    Valeurs ("B", 1158, défaut);

Étant donné que toutes les colonnes ont des valeurs par défaut, il serait possible d'écrire aux valeurs par défaut pour insérer une chaîne:

    Insérer dans le produit_d.

    Valeurs (par défaut, défaut, défaut);

Cependant, dans ce cas, une conception spéciale de valeurs par défaut est destinée (voir la syntaxe de l'opérateur), avec laquelle l'opérateur ci-dessus peut être réécrit comme

    Insérer dans des valeurs de défaut de produit_d;

Notez que lors de l'insertion d'une chaîne dans la table, toutes les restrictions imposées sur cette table sont vérifiées. Celles-ci peuvent être des limitations de la clé primaire ou d'un index unique, vérifiez les limites de la vérification de type, limiter l'intégrité de référence. En cas de violation de toute restriction, la chaîne d'insertion sera rejetée. Considérez maintenant le cas de l'utilisation d'une sous-requête. Devant nous insérer dans la table du produit_d toutes les lignes de la table des produits liés aux modèles d'ordinateurs personnels (type \u003d 'PC'). Étant donné que les valeurs dont vous avez besoin sont déjà disponibles dans une table, la formation de chaînes insérées manuellement, premièrement, est inefficace et, deuxièmement, elle peut permettre des erreurs de saisie. Utiliser les sous-requêtes résout ces problèmes:

L'utilisation du symbole "*" dans la sous-requête est en l'quelconque justifié, car l'ordre des colonnes est identique pour les deux tables. Si ce n'était pas le cas, il serait nécessaire d'appliquer une liste de colonnes dans l'instruction insertion ou dans une sous-requête, ou dans les deux endroits, qui apporterait l'ordre des colonnes:

Ici, aussi bien qu'avant, vous ne pouvez pas spécifier toutes les colonnes si vous souhaitez utiliser les valeurs par défaut, par exemple:

Dans ce cas, le PC par défaut de toutes les lignes insérées sera substitué dans la colonne Type Type Table.

Notez que lors de l'utilisation d'une sous-requête contenant un prédicat, seules ces lignes pour lesquelles la valeur du prédicat est égale à vraie (non inconnue!). En d'autres termes, si la colonne de type de la table du produit permettrait à Null-Valeur, et cette valeur serait présente dans un certain nombre de lignes, ces lignes ne seraient pas insérées dans la table Product_D.

Surmonter la restriction sur l'insertion d'une ligne dans l'instruction insertion lorsque vous utilisez le constructeur de lignes dans l'offre Valeurs permet une utilisation artificielle d'une sous-requête de former une chaîne avec l'offre de l'Union. Donc, si nous devons insérer plusieurs lignes en utilisant un opérateur d'insertion, vous pouvez écrire:

    Insérer dans le produit_d.

    Sélectionnez "B" comme Maker, 1158 en tant que modèle "PC" comme type

    Union tout.

    Sélectionnez "C", 2190, "Ordinateur portable"

    Union tout.

    Sélectionnez "D", 3219, "Imprimante";

Utilisation de l'Union Toutes l'Union préférée, même si le manque de lignes-duplicates est garanti, car dans ce cas, le chèque ne sera pas effectué pour exclure les doublons.

Il convient de noter que l'insertion de plusieurs tuples à l'aide d'un concepteur de lignes est déjà implémentée dans Systèmes de gestion de bases de données relationnelles (SGBD) développés par Microsoft. Langue des requêtes structurées) est un langage informatique universel utilisé pour créer, modifier et gérer des données dans des bases de données relationnelles.serveur SQL 2008. Avec cette opportunité, la dernière demande peut être réécrite dans le formulaire:

    Insérer dans les valeurs de produit_d

    ("B", 1158, "PC"),

    ("C", 2190, "ordinateur portable"),

Syntaxe générale:

a) Insérez une nouvelle ligne dans le tableau:

Insérer.<таблица> [(Colonnes)]

Valeurs

b) Insérer dans un tableau d'une ou plusieurs lignes extraites de la source spécifiée dans la sous-requête:

Insérer.<таблица> [(Colonnes)]