• ベストアンサー

ロールバックできず困っています。

1.テーブルAに、新たに列を追加したテーブルBを作成。 ↓ 2.テーブルAのデータをテーブルBにコピー。 ↓ 3.テーブルAを削除。 ↓ 4.テーブルBの名前をテーブルAに変更。 という一連の処理があります。 これらの処理でエラーが発生した場合、処理実行前の状態に戻したいのですが、ロールバックできずに消されるはずだった不要なテーブルが残ってしまいます。 何か方法はありますか?よろしくお願いします。

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

  • ベストアンサー
  • okg00
  • ベストアンサー率39% (1322/3338)
回答No.1

DBMSは何をお使いでしょうか? http://dev.mysql.com/doc/refman/5.1/ja/implicit-commit.html http://rina.jpn.ph/~rance/om/sql/hosoku05.html create table や drop tableなどのDDLには暗黙的にcommitする物がありますので、それではないかと思います。テーブル名変更のalter tableもそうですね。 ワークテーブルはそのまま保持しておくか、組み込みSQLを作成しておいてエラーが発生時にはワークテーブルの存在チェックをして存在するなら削除するようにしてみては?

freedom325
質問者

お礼

説明がまるまる抜けててすいません。。 今回はVBA ACCESS2003を使用して作成しています。 >ワークテーブルはそのまま保持しておくか、組み込みSQLを作成してお>いてエラーが発生時にはワークテーブルの存在チェックをして存在するなら削除するようにしてみては? 確かにそれが確実ですよね。なかなか思い通りにいかないので大変です。。まずはこれでやってみようと思います。

その他の回答 (2)

  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.3

No2さん、メジャーな製品ではSQL Serverがそうです。 begin tran create table tbla ([fld][int]) insert into tbla values (1) select * from tbla rollback tran テーブルはなくなります。 逆にいうと、SQL Serverなら今回のケースはできたんでしょうね。

freedom325
質問者

お礼

SQLサーバーならやはりできますよね。。 今回はVBA ACCESS2003を使用していたのですが、エラー発生時にSQL文を走らせないと削除は無理みたいですね。 どうもありがとうございました。

  • jjon-com
  • ベストアンサー率61% (1599/2592)
回答No.2

>DDLには暗黙的にcommitする物があります というか,DDLは必ず暗黙的にcommitされる,すなわちそもそもDDLはrollbackできないんじゃないですか。 create table, drop table, alter tableなどのDDLがrollbackできるデータベース製品というのを私は知りません。ご存知でしたら教えてください。

関連するQ&A