PostgreSQLでは、いくつかのテストデータを使用してテーブルを作成し、トランザクションでそれを別のタイプの新しい列に移行することで、1回のテーブル書き換えでCOMMIT
、
CREATE TABLE foo ( a int );
INSERT INTO foo VALUES (1),(2),(3);
に続く、
BEGIN;
ALTER TABLE foo ADD COLUMN b varchar;
UPDATE foo SET b = CAST(a AS varchar);
ALTER TABLE foo DROP COLUMN a;
COMMIT;
ただし、MicrosoftのSQL Serverでは同じことがエラーを生成するようです。この作業の比較デシベルのフィドル、ADD
(列)コマンドは、トランザクションの外にあります
-- txn1
BEGIN TRANSACTION;
ALTER TABLE foo ADD b varchar;
COMMIT;
-- txn2
BEGIN TRANSACTION;
UPDATE foo SET b = CAST( a AS varchar );
ALTER TABLE foo DROP COLUMN a;
COMMIT;
動作しないこのdbフィドルに、
-- txn1
BEGIN TRANSACTION;
ALTER TABLE foo ADD b varchar;
UPDATE foo SET b = CAST( a AS varchar );
ALTER TABLE foo DROP COLUMN a;
COMMIT;
しかし、代わりにエラー
Msg 207 Level 16 State 1 Line 2
Invalid column name 'b'.
とにかく、DDLに関して、このトランザクションを可視化してPostgreSQLのように動作させる方法はありますか?