プロが教える店舗&オフィスのセキュリティ対策術

SQLServer2005 Workgroup を使っています。

500万行ぐらいあるテーブルがあるのですが

update テーブル名 set 列=~~ where ~~~
update テーブル名 set 列=~~ where ~~~
update テーブル名 set 列=~~ where ~~~
update テーブル名 set 列=~~ where ~~~

というプログラムを実行したところ、10時間経っても計算結果が終わらない為、
一旦キャンセルをしました。

ところが「クエリをキャンセルしてます」というメッセージが流れたまま
キャンセル後、10時間経過しても終了してくれません。

この状態で新たにクエリを作ってプログラムを実行してもものすごく処理が重いです。

キャンセルによってデータを元に戻そうとしているのかどうか分りませんが
元に戻さなくていいので強制的に終了する方法はないでしょうか?

A 回答 (2件)

頑張ってロールバックしているんでしょうね。


Update文が何行あるのかわかりませんが、適宜Commit入れておくことはできなかったんでしょうか?

責任を負えませんが、データのバックアップがきちんと用意できている等
DBが壊れることも厭わないなら、「サービスを停止する」とか。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。

あの後、もうどうすることも出来ないので結局1日放置したら処理が終わっていました。

Commitと言う関数を使ったこと無いので調べてみました
「処理を確定する」ということらしいのですが

update ~~~
commit

と実行すると

メッセージ 3902、レベル 16、状態 1、行 2
COMMIT TRANSACTION 要求に対応する BEGIN TRANSACTION がありません。


と言うメッセージが流れてくるのですが
これはcommitがちゃんと完了しているのでしょうか?

申し訳ないのですが、調べてもよく分らなかったので
よろしければご教授お願いします。

お礼日時:2012/02/27 09:55

1 の回答へのコメントへの回答



メッセージ 3902、レベル 16、状態 1、行 2
COMMIT TRANSACTION 要求に対応する BEGIN TRANSACTION がありません。


書いてある日本語の通りです。

BEGIN TRANSACTION

Update テーブル名・・・・

COMMIT

って書けばいいのです。
ただ、その前に一度「SQL トランザクション」で勉強されてから、
タスクをこなされた方が良いかと思いますよ?
何の目的で書いたプログラムなのかはわかりませんが、
トランザクション(transaction、commit、roll back)ぐらいは
把握されてからプログラムを書かれた方が幸せになれると思います。
    • good
    • 0
この回答へのお礼

親切な回答ありがとうございます。

勉強不足で申し訳ございませんでした。

お礼日時:2012/02/28 15:21

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A