Dalam PostgreSQL saya dapat membuat tabel dengan beberapa data uji, dan kemudian dalam suatu transaksi migrasi ke kolom baru dari jenis yang berbeda menghasilkan satu tabel-menulis ulang COMMIT
,
CREATE TABLE foo ( a int );
INSERT INTO foo VALUES (1),(2),(3);
Diikuti oleh,
BEGIN;
ALTER TABLE foo ADD COLUMN b varchar;
UPDATE foo SET b = CAST(a AS varchar);
ALTER TABLE foo DROP COLUMN a;
COMMIT;
Namun, hal yang sama di Microsoft SQL Server tampaknya menghasilkan kesalahan. Bandingkan db biola yang berfungsi ini , di mana perintah ADD
(kolom) berada di luar transaksi,
-- 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;
untuk biola db ini yang tidak bekerja,
-- txn1
BEGIN TRANSACTION;
ALTER TABLE foo ADD b varchar;
UPDATE foo SET b = CAST( a AS varchar );
ALTER TABLE foo DROP COLUMN a;
COMMIT;
Melainkan kesalahan
Msg 207 Level 16 State 1 Line 2
Invalid column name 'b'.
Apakah ada cara untuk membuat transaksi ini terlihat, sehubungan dengan DDL, berperilaku seperti PostgreSQL?
sumber
b
di bawah dalam pernyataan insert. Saya menggunakan SQL Server 2014