none
クエリ(insert)を複数回実行する方法について RRS feed

  • 質問

  • こんにちは。アべです。

    下記のノリで500行のデータを作りたいです。whileを使わず確かsetで出来たと思うのですが、ど忘れしてしまいました。
    やり方が分かるかがいましたら、???の部分を教えてもらえますか?環境:SQL Server 2014SP1

    create table test3(id int identity primary key, name nvarchar(50));

    set ??? 500
    insert into test3(name)values('1');

    2015年6月12日 8:13

回答

  • 色々やり方が既に出ていますが、個人的に一番手っ取り早いと思うのは以下ですかね。

    create table test3(id int identity primary key, name nvarchar(50));
    GO

    insert into test3 (name) values ('1');
    GO 500


    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク kiyo7447R2 2015年6月13日 8:40
    2015年6月12日 10:18

すべての返信

  • SQL Serverのバージョンがわかりませんし、質問されている内容がはっきりわからないのですが、以下のようなことでしょうか?

    【SQLServer2008】複数件のデータをINSERTする
    http://www.ilovex.co.jp/blog/system/cat820/sqlserver2008insert.html

    (追記)
    すみません。SQL Serverのバージョンは書かれていましたね。見逃してました。


    ★良い回答には回答済みマークを付けよう! MVP - .NET  http://d.hatena.ne.jp/trapemiya/

    • 編集済み trapemiya 2015年6月12日 13:12 追記
    2015年6月12日 8:48
  • 複数回ではなく一括であれば共通テーブル式を使用する再帰クエリでしょうか

    WITH CTE (name)
    AS (
      SELECT '1'
      UNION ALL
      SELECT name FROM CTE
    )
    INSERT INTO test3(name)
    SELECT TOP(500) name
    FROM CTE;

    2015年6月12日 8:51
  • 色々やり方が既に出ていますが、個人的に一番手っ取り早いと思うのは以下ですかね。

    create table test3(id int identity primary key, name nvarchar(50));
    GO

    insert into test3 (name) values ('1');
    GO 500


    MCITP(Database Developer/Database Administrator)

    • 回答としてマーク kiyo7447R2 2015年6月13日 8:40
    2015年6月12日 10:18
  • これでした。確か一行で何万書きも一括で実行できたかと思っていたのですが、ど忘れてしておりました。

    有難うございます!

    2015年6月13日 8:41
  • 参考になりました。有難うございます。ただ、100回で最大再帰数に達するようです

    create table test5(id int identity primary key, name nvarchar(50));

    WITH CTE (name)
    AS (
      SELECT '1'
      UNION ALL
      SELECT name FROM CTE
    )
    INSERT INTO test5(name)
    SELECT TOP(500) name
    FROM CTE;

    /*
    メッセージ 530、レベル 16、状態 1、行 3
    ステートメントが終了しました。ステートメントの完了前に最大再帰数 100 に達しました。
    */

    2015年6月13日 8:43
  • WITH common_table_expressionによるとMAXRECURSIONヒントを指定することで変更できるそうです。

    また

     SELECT '1'
      UNION ALL
      SELECT name FROM CTE
      UNION ALL
      SELECT name FROM CTE

    といった感じで行数を増やすようにすれば制限を回避できるかもしれません。(カウント方法にも依るので回避できないかもしれません。)

    2015年6月13日 14:41