En PostgreSQL puedo crear una tabla con algunos datos de prueba, y luego, en una transacción, migrarla a una nueva columna de un tipo diferente, lo que da como resultado una reescritura de la tabla COMMIT
,
CREATE TABLE foo ( a int );
INSERT INTO foo VALUES (1),(2),(3);
Seguido por,
BEGIN;
ALTER TABLE foo ADD COLUMN b varchar;
UPDATE foo SET b = CAST(a AS varchar);
ALTER TABLE foo DROP COLUMN a;
COMMIT;
Sin embargo, esa misma cosa en el SQL Server de Microsoft parece generar un error. Compare este db fiddle de trabajo , donde el ADD
comando (columna) está fuera de la transacción,
-- 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 este violín db que no funciona,
-- txn1
BEGIN TRANSACTION;
ALTER TABLE foo ADD b varchar;
UPDATE foo SET b = CAST( a AS varchar );
ALTER TABLE foo DROP COLUMN a;
COMMIT;
Pero en cambio errores
Msg 207 Level 16 State 1 Line 2
Invalid column name 'b'.
¿Hay alguna forma de hacer que esta transacción sea visible, con respecto a DDL, comportarse como PostgreSQL?
fuente
b
en la instrucción de inserción. Estoy usando SQL Server 2014