• 締切済み

VBでSQL

SQLでテーブル1に該当レコードがなければインサート あればアップデートをする処理をしたいのです IF ??? THEN UPDATE テーブル1 SET SELECT * FROM テーブル2 WHERE 条件 ELSE INSERT INTO テーブル1(SELECT * FROM テーブル2) END IF ???はプライマリキーで判定をしようと考えています こんな感じでやろうとしたところ うまくいきませんでした VB上で実行しよううとしているからなのでしょうか? ADOでSQLサーバに接続しています 条件分岐もどういう条件(VBでの書き方)がわからないです。 よろしくお願いします。

  • hell
  • お礼率16% (41/243)

みんなの回答

  • zerosix
  • ベストアンサー率31% (47/149)
回答No.1

>SQLでテーブル1に該当レコードがなければ SELECT文はご存知ですか? 条件を満たすレコードを取得することができます。 これを使用すれば、条件判定ができます。 ADODB.Recordsetオブジェクト(rso)のEOFで取得できます。 If rso.EOF = False Then 'ある Else 'ない end if

関連するQ&A

  • SQL文について

    開発言語:VB2010 DB:SqlServer2005 及び ACCESS2007 SQLサーバーのテーブルをAccessのテーブルへINSERTしたいのですが、 一文で行う事は可能でしょうか? (テーブルの構造は全く同じです) 同じDB内であれば、下記のような感じで出来ると思うんですが。 +----------------------------------+ INSERT into Atest_ACCESS SELECT * FROM Btest_SQL Where OperationDate => 2011/09/05 +----------------------------------+ 出来るのあればどのようにすれば良いのが教えて頂けると幸いです。 よろしくお願い致します。

  • 動的SQL (その2)

    2008です。 有給休暇の使用日(複数)を文字列として、一つのフィールドに入れる 仕組みを作ろうとしています。 (4/1、6/20、6/21 8/30・・・・・てな感じです) 動的SQLでパラメータに値を代入する方法によって結果が変わってしまいます。 現象1 パラメータに代入(Set)するときに「'A0'」をセットすると正常に動きますが、 「(Select Max(コード) From テーブル Where コード='A0')」にすると パラメータの入力を求められます。 しかし後者をIf文の中で代入するとパラメータの入力は求められません(下記) if Select Max(コード) From テーブル Where コード='A0' = 'V0'   set @para = 'V0' else   begin   set @para = (Select Max(コード) From テーブル Where コード='A0')   end **********@paraを使う動的SQL*********** 現象2 上記のIf文でパラメータを代入後、動的SQLの直前に@paraの値を確認の為 テーブルに書き込む(Insert)と動的SQLの結果が無くなってしまいます。 動的SQLの後にも書込を入れてみましたが、同じ値が書き込まれています。 当然、直前の書込を無くせば正常に表示されます。 何とか動作するのですが納得できず、将来に禍根を残しそうな現象であり どうするべき(スルーするべき)か悶々としています。

  • T-SQLとACCESSクエリのSELECT分内のif文の利用について

    お世話になります。 ACCESSクエリからSQLServer2005のストアドに移行を検討中です。 ACCESSクエリではINSERT INTO時のSELECT内にIIF文による条件分岐が使えたのですが、T-SQLでは、INSERT INTO時のSELECT内にIF文やswitch文は使えないのでしょうか?その場合、どのようにすれば宜しいでしょうか? 例> ACCESSクエリでは以下のようにかけると思うのですが・・・ INSERT INTO Table1 (Pコード,単価) SELECT Table2.Pコード,IIf(Table2.Check定価=1,Table2.定価A*Table3.値引率,Table2.定価B*Table3.値引率) FROM Table2 RIGHT JOIN Table3 ON Table2.Pコード = Table3.Pコード; 宜しくお願いします。

  • SQLの数値への単位について

    現在SQLをpaizaにて実行してるのですが ・highにcm wightにkgの単位の付け方 ・UPDATE DELETEが上手く実行されない の二点の修正方法が分からず、どなたか教えて頂けないでしょうか? 「ソースコード」 create table employees(height integer, weight integer); INSERT INTO employees(height, weight) VALUES(170, 50); INSERT INTO employees(height, weight) VALUES(180, 90); INSERT INTO employees(height, weight) VALUES(165, 70); SELECT height FROM employees; SELECT height AS tall FROM employees; UPDATE employees SET height ='171' WHERE weight ='170'; DELETE FROM employees WHERE height ='180'; 「実行結果」 height 170 180 165 tall 170 180 165

    • ベストアンサー
    • MySQL
  • Access SQLを使ったソートがずれる

    Access2003で以下のfunctionを組みました。 ************************************* Dim SQL As String Dim strList As String SQL = "" strList = "" 'サブテーブルの削除 SQL = "DELETE * FROM SUB_T" CurrentProject.Connection.Execute SQL SQL = "INSERT INTO SUB_T SELECT Master_T.* FROM Master_T WHERE " With Forms!SEARCH! '検索条件がnullの場合 If IsNull(.CODE_SRH) Then SQL = "INSERT INTO SUB_T SELECT Master_T.* FROM Master_T" End If 'コードの条件 If .CODE_SRH <> "" Then strList = "Master_T.CODE Like '" & .CODE_SRH & "%'" End If End With SQL = SQL & strList & " ORDER BY (val(CODE))" CurrentProject.Connection.Execute SQL ************************************* Master_T テーブルの CODE は テキスト型 内容は以下のとおり "001","あいうえお",.... "003","さしすせそ",.... "002","かきくけこ",.... "013","GHI",.... "011","ABC",.... 検索条件Nullの場合SUB_T テーブルには "001","あいうえお",.... "002","かきくけこ",.... "003","さしすせそ",.... "011","ABC",.... "013","GHI",.... とインサートされるはずですが、何回か実行すると・・・・ "003","さしすせそ",.... "011","ABC",.... "013","GHI",.... "001","あいうえお",.... "002","かきくけこ",.... こんなだったり "011","ABC",.... "013","GHI",.... "001","あいうえお",.... "002","かきくけこ",.... "003","さしすせそ",.... このような感じに並びます。 試しに、明示的に"ORDER BY (val(CODE)) ASC"にしても また降順ではどうかと思い、"ORDER BY (val(CODE)) DESC"にしても 同じ現象が出ます。 コードの条件を入れても同様な現象が出ます。 何が原因なのかさっぱり分かりません。 Accessのどこかを確認すべきか、VBAを見直すべきなのか ご教授いただきたいです。

  • SQLについて

    こんにちは、honiyonです。  良い質問タイトルが思いつきませんでした...(^^;  2つのテーブルがあります。(仮定です)   ・オーナーの情報テーブル(owner)   ・オーナーの車の情報テーブル(car)  この2つのテーブルを利用して「男性の人で、黒い車に乗ってる人の車種名」を検索しようとしました。  これを1つのSQLで   SELECT car.name FROM owner,car WHERE (owner.no=car.ownerno) and (car.color='black') and (owner.sex='MAN');  とか、   SELECT car.name FROM (SELECT * FROM owner WHERE (owner.sex='MAN')) AS O2, (SELECT * FROM car WHERE (car.color='black')) AS C2 WHERE (owner.no=car.ownerno);  とかやってみましたが、涙が出るほど遅いです。  しかし   SELECT * INTO TABLE owner_tmp FROM (SELECT * FROM owner WHERE owner.sex='MAN'); SELECT * INTO TABLE car_tmp FROM (SELECT * FROM car WHERE car.color='black'); SELECT car_tmp.name FROM (owner_tmp.no=car_tmp.ownerno);  とすると超高速です。  なんとかテンポラリを作らず、出来れば1つのSQL文で高速に冒頭の処理を行いたいのですが、良い方法はないでしょうか。 是非お知恵を貸してください。  宜しくお願いします(.. #データベースはPostgreSQL 7.2.3です。

  • 2つの表の整合をとる方法

    こんにちは、 オラクルで2つの同じ表を同じデータに保つ方法について悩んでいます。 A表、B表共 COL1 プライマリキー COL2 COL3 として。 両テーブルのデータをあわせこみたいのですが、 過去ログを調べたところ、他方に無いデータの獲得についてはありましたのでそれを参考にINSERT文を作成しました。 INSERT INTO B ( SELECT * FROM A WHERE NOT EXISTS ( SELECT * FROM B WHERE A.COL1 = B.COL1 )) 上記SQLでAにあってBにないレコードがBに追加される事を確認しましたが、 COL1が同じでCOL2またはCOL3が違う場合の UPDATE文をどの様に記述すればよいか分かりません。 どなたかご教授願えないでしょうか?。

  • SQL SERVER で大量データの削除

    delete from table1 where id = 1; delete from table1 where id = 2; delete from table1 where id = 3; もしくは、 delete from table1 where (id = 1) or (id = 2) or (id = 1) という具合のSQLを実行します。 条件は大体20万件程度です。 こちらを実行するとかなり遅いので、 なんとか一括で早く実行する方法はないものでしょうか? 今のところ、プログラムの都合上、プロシージャの中で行なってます。 PROCEDURE UPDATE(@DELSQL nvarchar(max)) EXEC (@DELSQL) @DELSQLに上記SQLが入ります。 大量のINSERTの時は、BULK INSERTのようなやり方があり、 回避できたのですが、困ってます。 どうかよろしくお願いします。

  • JAVAでテーブルの中身を見て、処理を分岐させるには

    JAVA初心者です。 JAVAで、ファイルから読み込んだデータをMySQLのテーブルに格納したいのですが、 すでにテーブルにある(キーが同じ)ならば、updateをし、 テーブル内同じキーのものがなければ、insertをしたいのですが、分岐条件の部分をどうやってかいたらよいのかわからず、上手くかけません。 select count(*) from table where key=00000; を使うのかなと思うのですが、 どうやって書いたらいいのかわかりません。 どなたか教えてください!

    • ベストアンサー
    • Java
  • PL/SQLでのSQL文法

    こんにちは。教えてください。 PL/SQLを使うのが初めで戸惑っています。 まず、PROCEDUREで =========================== BEGIN SELECT NAME FROM TABLE1 WHERE NAME='tanaka'; END; / =========================== このように書いて実行させようとすると、「コンパイルエラー」 「INTO句はこのSELECT文に入ります」というエラーが出ます。 SQLの文法的には間違ってないと思うのですが、INTO句とはこれいかに?? ネットでPL/SQLで検索かけて調べたのですがあまりにも初歩すぎて わかりませんでした。 PL/SQLやORACLEのメーリングリストでお勧めがありましたら教えてください。 よろしくお願いいたします。