No PostgreSQL, posso criar uma tabela com alguns dados de teste e, em uma transação, migrá-la para uma nova coluna de um tipo diferente, resultando na reescrita de uma tabela 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;
No entanto, a mesma coisa no SQL Server da Microsoft parece gerar um erro. Compare este db fiddle em funcionamento , onde o ADD
comando (column) está fora da transação,
-- 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;
para este violino db que não 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;
Mas erros
Msg 207 Level 16 State 1 Line 2
Invalid column name 'b'.
Existe alguma maneira de tornar essa transação visível, em relação ao DDL, se comportar como o PostgreSQL?
fonte
b
na instrução insert. Estou usando o SQL Server 2014