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

解決済みの質問

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

1.テーブルAに、新たに列を追加したテーブルBを作成。

2.テーブルAのデータをテーブルBにコピー。

3.テーブルAを削除。

4.テーブルBの名前をテーブルAに変更。

という一連の処理があります。
これらの処理でエラーが発生した場合、処理実行前の状態に戻したいのですが、ロールバックできずに消されるはずだった不要なテーブルが残ってしまいます。

何か方法はありますか?よろしくお願いします。

投稿日時 - 2008-07-08 18:42:42

連想キーワード:

QNo.4161112

すぐに回答ほしいです

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

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を作成しておいてエラーが発生時にはワークテーブルの存在チェックをして存在するなら削除するようにしてみては?

投稿日時 - 2008-07-08 19:20:44

お礼

説明がまるまる抜けててすいません。。
今回はVBA ACCESS2003を使用して作成しています。

>ワークテーブルはそのまま保持しておくか、組み込みSQLを作成してお>いてエラーが発生時にはワークテーブルの存在チェックをして存在するなら削除するようにしてみては?

確かにそれが確実ですよね。なかなか思い通りにいかないので大変です。。まずはこれでやってみようと思います。

投稿日時 - 2008-07-09 09:49:16

ANo.1

2人が「このQ&Aが役に立った」と投票しています

[  前へ  |  次へ ]

ベストアンサー以外の回答(2件中 1~2件目)

ANo.3

No2さん、メジャーな製品ではSQL Serverがそうです。
begin tran
create table tbla ([fld][int])
insert into tbla values (1)
select * from tbla
rollback tran
テーブルはなくなります。

逆にいうと、SQL Serverなら今回のケースはできたんでしょうね。

投稿日時 - 2008-07-09 02:33:42

お礼

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

投稿日時 - 2008-07-09 09:56:18

ANo.2

>DDLには暗黙的にcommitする物があります

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

投稿日時 - 2008-07-08 23:23:04

あわせてチェックしたい
  • ロールバック ...
  • SQLのロールバック ...
  • データ削除、追加によるロールバックセグメントについて ...
PR
【回答募集中】花粉にひと言、物申す![ 詳細 ]

OKWaveのオススメ

教えて弁護士さん!

お金の悩みQ&A特集はこちら