Posted by OFPPT
No comments | 08:38



SQL Server 2005 : Insérer plusieurs lignes avec une seule requête





Cela devrait être une question assez simple, mais je n'ai pas été en mesure de trouver une réponse solide en ligne. J'essaie d'insérer plusieurs lignes dans la même table, mais avec une seule instruction. J'ai vu les plus populaires en ligne est la suivante, mais j'ai lu qu'il fonctionne uniquement avec SQL Server 2008 :
INSERT INTO Table (Name, Location) VALUES
('Name1', 'Location1'),
('Name2', 'Location2'),
('Name3', 'Location3'), etc...
Je préfère cette méthode si cela va fonctionner avec SQL Server 2005, mais je ne pense pas que ce sera. L'autre option, ce que j'ai lu, a à voir avec UNION ALL à la suite d'instructions SELECT après l'insertion, ce qui semble maladroit. Personne sait à coup sûr la meilleure syntaxe pour cela en 2005 ?
Merci.
répondre #1

Ouais. Vous devez utiliser UNION ALL s dans SQL Server 2005 pour insérer plusieurs lignes dans un script SQL dans une seule instruction.
INSERT INTO Table 
  (Name, Location) 
SELECT 'Name1', 'Location1' 
UNION ALL
SELECT 'Name2', 'Location2'
UNION ALL
SELECT 'Name3', 'Location3' 
La principale autre alternative est de répéter la Insert déclaration plusieurs fois ce qui est encore plus détaillée. Vous devez être prudent d'utiliser des transactions explicites dans ce dernier cas pour éviter la surcharge de nombreuses validations individuelles (et pour des raisons d'atomicité bien sûr)
Si vous avez beaucoup de lignes à insérer, vous pouvaient utiliser BULK INSERT pour le charger tout à partir d'un fichier délimité dans une seule instruction.
Enfin si il s'agit de données déjà présentes dans la base de données que vous êtes scripting dehors (peut-être pour le déployer sur un autre serveur) l'addin SSMS Tools Pack intègre une fonction de « Générer des requêtes Insert » que peut générer ces instructions pour vous.
répondre #2

Vous devez utiliser le union all dans sql server 2005. Pour être honnête, c'est tellement maladroit et laid, je voudrais juste utiliser multiple inserts si j'étais vous. Enveloppez-les dans une seule transaction et c'est la même chose en fin de compte.
répondre #3

Oui, ils sont vos seules options, sauf si vous insérez un grand nombre de données et que vous pourriez vouloir explorer unBULK INSERT
INSERT INTO Table (Name, Location)
SELECT 'Name1', 'Location1' UNION ALL
SELECT 'Name2', 'Location2' UNION ALL
SELECT 'Name3', 'Location3' 
répondre #4

Comme d'autres l'ont dit, la clé est ici UNION ALL . Pour moi, à l'aide d'une CTE garde les choses à la recherche un peu plus propre par exemple
WITH NewStuff (Name, Location)
     AS
     (
      SELECT 'Name1', 'Location1' UNION ALL
      SELECT 'Name2', 'Location2' UNION ALL
      SELECT 'Name3', 'Location3' 
     )
INSERT INTO Stuff (Name, Location) 
SELECT Name, Location
  FROM NewStuff; 

0 commentaires:

Enregistrer un commentaire