dans SQL Server 2008, vous pouvez utiliser la syntaxe de constructeur de ligne pour insérer plusieurs lignes avec une seule instruction insert, par exemple: y a-t-il d'avantages pour le faire au lieu d'avoir une déclaration d'insertion Pour chaque enregistrement autre que la lisibilité? p> p>
4 Réponses :
Oui, vous verrez des améliorations de performance. Surtout avec un grand nombre d'enregistrements. P>
En fait, il peut y avoir une prestation de performance significative si un grand nombre d'instructions d'insertion individuelles seraient envoyées via une connexion réseau. Voir Ma réponse ici pour un exemple.
Édité une mauvaise réponse pour le rendre correct après de nombreuses années? :) On dirait que c'était une pitié la seule réponse correcte à cette question sur ce thread était de Kittes1024 et non marquée comme une réponse (qui me fait penser que les marques de réponse ops doivent être corrigées par des modérateurs).
Si vous insérerez plus d'une colonne de données avec un Par exemple: p> Sélectionnez CODE> En plus de vos lignes explicitement dactylographiées, le constructeur de la valeur de la table vous obligera à épeler chaque colonne individuellement par opposition à votre Utilisez une instruction code> Insérer code>, vous pouvez spécifier plusieurs colonnes dans la section
Sélectionnez code>.
INSERT INTO dbo.MyProducts (Name, ListPrice)
VALUES ('Helmet', 25.50),
('Wheel', 30.00),
((SELECT Name FROM Production.Product WHERE ProductID = 720),
(SELECT ListPrice FROM Production.Product WHERE ProductID = 720));
GO
Il n'y a pas d'avantage de performance comme Abe mentionné. P>
L'ordre du constructeur de colonnes est l'ordre requis pour les valeurs (ou sélectionnez l'instruction). Vous pouvez énumérer les colonnes dans n'importe quel ordre - les valeurs devront suivre cette commande. P>
Si vous changez de manière accidentelle de colonnes dans la clause Sélectionner une instruction (ou des valeurs) et que les types de données sont compatibles, l'utilisation de la construction Colonnes vous aidera à trouver le problème. P>
aye, il existe une différence de performance assez importante entre:
select * from (values (0) , (1) , (2) , (3) , (4) ) as Numbers (n);
Il peut également y avoir une prestation de performance significative si un grand nombre d'instructions d'insertion individuelles seraient envoyées via une connexion réseau.
@Gordthompson le plus définitivement. Si vous insérez 10 000 lignes sur le réseau avec des instructions individuelles, au minimum, vous gaspillez les 240 000 octets nécessaires pour envoyer juste la chaîne insérer dans code> sur le fil 10 000 fois. Chaque personnage que vous ajoutez après cela pour les noms de table / colonne est de deux autres octets qui doivent être envoyés, reçus et analysés avant que l'une des choses écrites dans mon poste ci-dessus commence à s'appliquer ...