web-dev-qa-db-ja.com

SQLのループ内でテーブルに300回INSERTするにはどうすればよいですか?

SQLのカウンターから取得した値を挿入し、300回繰り返したいと思います。

何かのようなもの:

DECLARE @Counter = 0;

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

どうすればこれを達成できますか?ありがとう

25
pencilCake

次のように試すことができます:

DECLARE @i int = 0
WHILE @i < 300 
BEGIN
    SET @i = @i + 1
    /* your code*/
END
40
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
17
N J

私ができるなら、一般的にループを防ぐでしょう、セットアプローチははるかに効率的です:

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

Demo

ループなしでセットまたはシーケンスを生成

5
Tim Schmelter

Ssmsでは、GOを使用して同じステートメントを実行できます

編集これは、

 some query

 GO n

一部のクエリはn回実行されます

3

Simairair問題を解決するために組み合わせたいくつかの異なる答えを見つけました。

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;

1 miljon行を追加します

  • idは、イタレーションごとに1つずつ増加します
  • numがidよりも大きい
  • 次のようなID番号で連結されたテキスト:text1、text2 ... text1000000
  • otherText1、otherText2 ... otherText1000000のようなID番号と連結されたtext2
0