none
ストアド内で値を取得し、その値をインサートしたい RRS feed

  • 質問

  • ASP.net + SQLServer2008R2 ExpressEdition で開発しています。


    下記の処理をストアドにしたいのですが、可能でしょうか?

    可能であれば、書き方も教えて頂けないでしょうか?


    1.テーブルAに company_cd が 001 のレコードが存在するか
     →存在しない場合は、同テーブルにcompany_cd が 005 のレコードが存在するか
      →存在しない場合は2.に進まず処理終了

    2.1で取得したレコードの各項目をテーブルBにインサートする


    宜しくお願い致します。

    2013年3月25日 2:38

回答

  • company_cd が 001 のレコードが存在した場合は、company_cd が 005 のレコードはテーブルBにインサートしないのでしょうか? であれば、以下のように書けると思います。

    insert into テーブルB (hoge, fuga) select hogehoge, fugafuga from テーブルA where company_cd = '001';

    if @@rowcount > 0 return;

    insert into テーブルB (hoge, fuga) select hogehoge, fugafuga from テーブルA where company_cd = '005';

    もし、insert文を直接実行したくない、もしくはテーブルAの取得結果を加工してテーブルBにインサートしたいのであれば、カーソルを使えば良いと思いますが、ご質問されている仕様の詳細がわからないため、とりあえずinsert文を直接実行する方法をご紹介しました。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク hana0101 2013年3月25日 7:42
    2013年3月25日 3:17

すべての返信

  • ストアドもなにも、普通のINSERT文に条件を指定するだけのように思いますが。

    INSERT文は条件に合致する行がない場合、0行insertしたとして、正常終了しますよ。

    2013年3月25日 2:46
  • company_cd が 001 のレコードが存在した場合は、company_cd が 005 のレコードはテーブルBにインサートしないのでしょうか? であれば、以下のように書けると思います。

    insert into テーブルB (hoge, fuga) select hogehoge, fugafuga from テーブルA where company_cd = '001';

    if @@rowcount > 0 return;

    insert into テーブルB (hoge, fuga) select hogehoge, fugafuga from テーブルA where company_cd = '005';

    もし、insert文を直接実行したくない、もしくはテーブルAの取得結果を加工してテーブルBにインサートしたいのであれば、カーソルを使えば良いと思いますが、ご質問されている仕様の詳細がわからないため、とりあえずinsert文を直接実行する方法をご紹介しました。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク hana0101 2013年3月25日 7:42
    2013年3月25日 3:17
  • INSERT INTO テーブルB (hoge, fuga)
    SELECT TOP(1) hogehoge, fugafuga
    FROM (SELECT hogehoge, fugafuga
          FROM テーブルA
          WHERE company_cd = '001'
          UNION ALL
          SELECT hogehoge, fugafuga
          FROM テーブルA
          WHERE company_cd = '005');
    
    の1文でいいかなと思っていました。
    2013年3月25日 5:34
  • 佐祐理様、trapemiya様、ありがとうございます。


    trapemiya様の方法で作成する事が出来ました。


    今後もしかしたら取得結果を加工する事もあるかもしれないので、

    カーソルの勉強もしたいと思います。


    ありがとうございました。

    2013年3月25日 7:42
  • 佐祐理様のレスに気付かず返信してしまいました。


    佐祐理様の方法も試してみたいと思います。


    ありがとうございます。

    2013年3月25日 7:50