- ベストアンサー
ロールバックできず困っています。
1.テーブルAに、新たに列を追加したテーブルBを作成。 ↓ 2.テーブルAのデータをテーブルBにコピー。 ↓ 3.テーブルAを削除。 ↓ 4.テーブルBの名前をテーブルAに変更。 という一連の処理があります。 これらの処理でエラーが発生した場合、処理実行前の状態に戻したいのですが、ロールバックできずに消されるはずだった不要なテーブルが残ってしまいます。 何か方法はありますか?よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
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を作成しておいてエラーが発生時にはワークテーブルの存在チェックをして存在するなら削除するようにしてみては?
その他の回答 (2)
- jamshid6
- ベストアンサー率88% (591/669)
No2さん、メジャーな製品ではSQL Serverがそうです。 begin tran create table tbla ([fld][int]) insert into tbla values (1) select * from tbla rollback tran テーブルはなくなります。 逆にいうと、SQL Serverなら今回のケースはできたんでしょうね。
お礼
SQLサーバーならやはりできますよね。。 今回はVBA ACCESS2003を使用していたのですが、エラー発生時にSQL文を走らせないと削除は無理みたいですね。 どうもありがとうございました。
- jjon-com
- ベストアンサー率61% (1599/2592)
>DDLには暗黙的にcommitする物があります というか,DDLは必ず暗黙的にcommitされる,すなわちそもそもDDLはrollbackできないんじゃないですか。 create table, drop table, alter tableなどのDDLがrollbackできるデータベース製品というのを私は知りません。ご存知でしたら教えてください。
お礼
説明がまるまる抜けててすいません。。 今回はVBA ACCESS2003を使用して作成しています。 >ワークテーブルはそのまま保持しておくか、組み込みSQLを作成してお>いてエラーが発生時にはワークテーブルの存在チェックをして存在するなら削除するようにしてみては? 確かにそれが確実ですよね。なかなか思い通りにいかないので大変です。。まずはこれでやってみようと思います。