In PostgreSQL posso creare una tabella con alcuni dati di test, e quindi in una transazione migrarla in una nuova colonna di un tipo diverso con conseguente riscrittura di una tabella COMMIT
,
CREATE TABLE foo ( a int );
INSERT INTO foo VALUES (1),(2),(3);
Seguito da,
BEGIN;
ALTER TABLE foo ADD COLUMN b varchar;
UPDATE foo SET b = CAST(a AS varchar);
ALTER TABLE foo DROP COLUMN a;
COMMIT;
Tuttavia, la stessa cosa in SQL Server di Microsoft sembra generare un errore. Confronta questo violino db funzionante , dove il ADD
comando (colonna) è al di fuori della transazione,
-- 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;
a questo violino db che non funziona,
-- txn1
BEGIN TRANSACTION;
ALTER TABLE foo ADD b varchar;
UPDATE foo SET b = CAST( a AS varchar );
ALTER TABLE foo DROP COLUMN a;
COMMIT;
Ma invece errori
Msg 207 Level 16 State 1 Line 2
Invalid column name 'b'.
Esiste un modo per rendere visibile questa transazione, per quanto riguarda DDL, comportarsi come PostgreSQL?