web-dev-qa-db-fra.com

Comment INSERT INTO dans une table 300 fois dans une boucle en SQL?

Je voudrais insérer une valeur extraite d'un compteur en SQL et la répéter 300 fois.

Quelque chose comme:

DECLARE @Counter = 0;

-- BEGIN Loop 
    SET @Counter = @Counter + 1 
    INSERT INTO tblFoo VALUES(@Counter)
-- REPEAT 300 times

Comment puis-je atteindre cet objectif? Merci

15
pencilCake

Vous pouvez l'essayer comme ça:

DECLARE @i int = 0
WHILE @i < 300 
BEGIN
    SET @i = @i + 1
    /* your code*/
END
26
Rahul Tripathi
DECLARE @first AS INT = 1
DECLARE @last AS INT = 300

WHILE(@first <= @last)
BEGIN
    INSERT INTO tblFoo VALUES(@first)
    SET @first += 1
END
12
N J

J'empêcherais les boucles en général si je peux, les approches d'ensemble sont beaucoup plus efficaces:

INSERT INTO tblFoo
  SELECT TOP (300) n = ROW_NUMBER()OVER (ORDER BY [object_id]) 
  FROM sys.all_objects ORDER BY n;

Demo

Génère un ensemble ou une séquence sans boucles

6
Rango

Dans SSMS, nous pouvons utiliser GO pour exécuter la même instruction

Edit Cela signifie que si vous mettez

 some query

 GO n

Certaines requêtes seront exécutées n fois

1
Ramkumar Sambandam

J'ai trouvé différentes réponses que j'ai combinées pour résoudre le problème simulair:

CREATE TABLE nummer (ID INTEGER PRIMARY KEY, num, text, text2);
WITH RECURSIVE
  for(i) AS (VALUES(1) UNION ALL SELECT i+1 FROM for WHERE i < 1000000)
INSERT INTO nummer SELECT i, i+1, "text" || i, "otherText" || i FROM for;

Ajoute 1 miljon lignes avec

  • identifiant augmenté d'un à chaque itération
  • num un plus grand puis id
  • texte concaténé avec id-number comme: text1, text2 ... text1000000
  • text2 concaténé avec un id-number comme: otherText1, otherText2 ... otherText1000000
0
Freddie Wahlgren