• ベストアンサー

複数レコードをUPDATE文一文で処理する方法

お世話になります。 掲題の件でご質問させていただきます。 レコードセットに格納した複数レコードデータをテキストボックスに格納し、 そのテキストボックスを変更した部分だけを一度に UPDATE文で変更する方法は存在するのでしょうか。 Loopさせて一行ずつ処理することはもちろんできるのですが どうしても一文で処理したいのです。 ASP+SQLServer2000の組み合わせで、SQL処理はすべて ストアド内でやっています。 説明がへたでわかりずらいとは思いますが、 どうぞよろしくお願い申し上げます。 それでは、失礼いたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • maruru01
  • ベストアンサー率51% (1179/2272)
回答No.1

こんにちは。maruru01です。 質問の意図をよく把握してないかも知れませんが、 その複数のレコードに一定の条件があれば、WHERE句でその条件を指定すれば、該当するレコードを一度に更新出来ますが。 ちなみにSETする値にサブクエリーを用いたり、SQLServerではFROM句に更新するデータのテーブルと別のテーブル名を指定したりすることが出来ます。 では。

Ha88888
質問者

お礼

ありがとうございました! 非常に参考になりました。 これから役立てていこうとおもいます。 失礼致します。

関連するQ&A

  • ストアドでのレコード処理

    ストアドの中でSELECT文を発行してその出力結果を元に次のSQL文を作成したいと思っています。そこでSQL文の出力結果をACCESSから呼んだ時の様にRECORD SETの処理の様な記述をしたいと思っています。そこでストアドの中で『SELECT [項目] from XXXX』の [項目]を参照するにはどの様な記述をすればいいのでしょうか。宜しくお願い致します。

  • VB6 + OO4O プロシージャの実行&複数行を受け取る方法

    VB6 + OO4O プロシージャの実行&複数行を受け取る方法 現在、VB6でOracleデータベースを操作しようと試みている最中で、 OO4Oで接続しています。 (表現誤っているかもしれません。。。) Oracleは今回初めてで、今まではSQLserverだったのですが、 SQLserverで、  1.ストアドを実行(パラメータあり)  2.レコードセット(複数行)を受け取る  3.ループで全件処理   ・・・ というような処理をしていました。 たとえば、あるテーブルの、ある条件に一致したレコード(複数あり)を全件取得 など。 「引数を渡してストアドプロシージャを実行し、複数行を結果として受け取る」ということがしたく、 Oracleでどのように実現させるかを調べてみたのですが、 「SQL文を記述し、受け取る」  例)strSQL = "select * from tbl"    Set OraDynaset = OraDatabase.CreateDynaset(strSQL, 0) というようなサンプルしか見つけられませんでした。 where句で条件を記述すれば同じなのかもしれませんが、 そういったこまごました記述をストアドプロシージャに記載しておき、 呼び出す際はパラメータだけ指定する、ということを想定しています。 ストアドを実行するサンプルは複数見つけたのですが、戻り値が1つのみか、戻り値なしのもので、 複数行を結果として受け取るようなサンプルが見あたりませんでした。 ストアド(PL/SQL)も作成してみたのですが、 単純に  select * from TBL; とするとエラーで、  select * BULK COLLECT INTO vTBl from TBL;  for i in 1 .. vTBl.count loop   -- 全レコードの項目「name」を表示する。   dbms_output.put_line(vTBl(i).name);  end loop; というように1件1件処理させていく方法しか見つけれませんでした。 Oracleのストアドは、今までのSQLServerの考え方はいけないのでしょうか? 調べるとしたら、どのような単語で調べたらよろしいでしょうか? 「VB6」「oo4o」「複数行」「プロシージャ」など、いろいろ努力はしたつもりなのですが。。。 ご指導よろしくお願いいたします。

  • 抽出対象の1レコードを複数レコードへ変更し出力する方法を

    抽出対象の1レコードを複数レコードへ変更し出力する方法を SQLで教えてください。(SQLServer2000です。) <イメージ> 店番 顧客番号 年月  A B C D ・・・(Dのあと100項目つづく)・・・ 1000 12345678 200909 10 20 30 40 2000 12345678 200910 30 40 50 60 を 店番 顧客番号 年月  AからD 1000 12345678 200909 10 1000 12345678 200909 20 1000 12345678 200909 30 1000 12345678 200909 40 2000 12345678 200910 30 2000 12345678 200910 40 2000 12345678 200910 50 2000 12345678 200910 60 と出力したいのですが、SQLServer2000ではPIVOT等が使用できず。 抽出処理が思いつきません。 パフォーマンスも悪くなったりしますか。 何か良い方法をご教示ください、よろしくお願い致します。

  • 1テーブル&複数レコードの更新に対して1度のupdate文での処理方法

    1テーブル&複数レコードの更新に対して1度のupdate文での処理方法 Delphi2010+SQL SERVER 2005で開発しています。 update文で、 現在下のようにwhileで複数レコードに対して、 1回、1回、sqlを発行して、更新しています。 これを、一度のSQLの発行で処理できないものでしょうか? 更新テーブルは1つで、更新する項目も同じです。 更新するデータと、where句の条件が異なります。 もし可能なようでしたら、どうかご教授お願いします。 update table set A=1,B=2 where id=1 update table set A=2,B=3 where id=5 update table set A=9,B=99 where id=7 update table set A=5,B=10 where id=15 update table set A=1,B=10 where id=75

  • ASP.NETのGridViewでNULLの場合にチェックボックスにしたい

    ASP.net(VB)とSQLSERVERで開発しているのですが、SQLSERVERでストアドプロシージャでSELECT文を発行するSQLを書きました。 1)そのデータをGridViewで表示したのですが、列がNULLの場合にチェックボックスを表示したい。←これが分からない 2)チェックボックスがonの状態で実行ボタンが押下された場合に別のストアドプロシージャを走らせてNULLを「確認済」としたい。 (例) チェック   |名前 |メールアドレス 確認済    |Aさん|aaaa@test.co.jp □(チェックボックス) |Bさん|bbbb@test.co.jp [実行ボタン] このようにこのようなことはGridViewで可能なのでしょうか? それとも、HTMLコントロールを使用して一行ずつ書きこんでいくしかないのでしょうか? 返答をお待ちしております。

  • SELECT文で時間軸を行で取得する

    いつもお世話になっております。 掲題の件で質問なのですが、ループを使わず SELECT文ひとつで(Loopや一時テーブルなしで)時間を取得する関数を使用し00~24という値を一行ずつ取得したいのですがどうしてもわかりませんでした。 お知恵を拝借したく思います。 もしこれが可能であれば、年や週もレコードでずらっと 表示できるかと思いますのでとても気になっているのです。 環境はSQLServer2000です。 文章力がなく説明不足で申し訳ありませんが ご存知の方がいらっしゃいましたら、 どうぞご教授よろしくお願いいたします。 失礼いたします。

  • ORACLEでの実装方法が知りたいです。

    SQLServerにて下記のようなストアドを作成しレスポンス改善を行いました。  ALTER PROC sp_Sql @sql ntext   AS  execute(@sql) 内容は単純で引数で渡したSQL文をストアド側にて実行するという内容です。 こちらをORACLE上(PL SQL)で同様の処理を行いレスポンス改善したいと思っております。 知識が不足しており移植することが出来ていません。誰か助けて頂けませんでしょうか。

  • UPDATE文について

    昨日こちらで自分の間違ったSQL文をご指摘頂き 時間計算の処理は実装する事が出来たのですが その後の計算処理が終わった後、計算結果をDBに格納する処理で 再度躓いてしまったので、再度のご教授お願いします。 $sql = "SELECT SUM(ROUND(労働時間/100, 0)) + ROUND(SUM(MOD(労働時間,100)) / 60, 2) AS total     FROM 労働時間テーブル WHERE id = 'ログインしている人のID';"; $total_Time = pg_query($con, $sql); $total_Time = pg_fetch_result($total_Time, 0, 'total'); // 確認のため、表示 echo $total_Time; で値はきちんと表示されおります。 しかし、この後UPDATE文で $sql = "UPDATE 労働時間テーブル SET 総労働時間 = '$total_Time' WHERE id = 'ログインしている人のID';"; pg_query($con, $sql); と打ち試しましたが、echoの時に表示された値がDBに格納されません。(>_<) 試しに $sql = "UPDATE 労働時間テーブル SET 総労働時間 = '$total_Time' WHERE id = 'ログインしている人のID';"; の'$total_Time'をSELECT文に変更したりもしましたが、echoの時に 表示されていた値とは違う値がDBに格納されるようになってしまいました。 どのように解決したらよいか、悩んでおります。 そもそもの考え方から間違っているのでしょうか? ご教授の程、よろしくお願い致します。

  • SQLのUpdateについて

    プログラム超初心者です。 開発環境;ASP.NET(visual studio2005) サーバ:SQLSERVER2005 sqldatasourceにupdate文を入れてマスタの更新処理を作っております。 対象のテキストボックスの値を空白にしたままupdate処理を走らせると、なぜか空白値がnull値となってDBに保存されてしまいます。 update処理をする際に空白値をnull値に変換しない方法ってありますか? ご教授お願いします。

  • AccessVBA レコードの更新

    私の環境はOS:Xp      ACCESS2000です。 宜しくお願いします さっそくで失礼かとは思いますが、 lngIdx = 1 Do While rs.EOF = False sql = "update 設備管理2_3改テーブル set " & vbCrLf sql = sql + " ID = '" & lngIdx & "'" & vbCrLf lngIdx = lngIdx + 1 rs.MoveNext Loop これでテーブルに格納されている「ID」という箇所をレコード単位で一つずつ変更していくのは無理なのでしょうか? やってみて無理だったんですけども。 どう記述したら、レコードを一つずつ更新出来るのでしょうか?