Por lo que veo Management Studio para añadir una columna lo que hace es eliminar la tabla y volverla a crear. Algo totalmente innecesario ya que SQL Server está preparado para añadir columnas a las tablas. Así que he probado a añadir la columna con Transact-SQL y tal como esperaba no he tenido ningún tipo de problema:
ALTER TABLE dbo.E_PLANTILLA_PREG ADD
FACTOR nvarchar(3) NOT NULL
GO
Lo curioso del tema es que si le pido al SSMS el SQL que va a utilizar para añadir la columna me devuelve algo parecido a esto (la sintaxis la he podido conseguir añadiendo una columna que permita valores nulos, en caso contrario recibía error del aplicativo indicando que no podía proceder a realizar los cambios sin eliminar la tabla en cuestión):
BEGIN TRANSACTION
GO
ALTER TABLE dbo.E_PLANTILLA_PREG ADD
NUEVA_COL nchar(10) NULL
GO
ALTER TABLE dbo.E_PLANTILLA_PREG SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
Curioso que para añadir una columna que permite nulos se utiliza un ALTER TABLE y sin embargo para añadir una columna que no permite nulos se intente eliminar la tabla. Supongo que lo hará para asegurar las consistencia de los datos existentes en la tabla ya que para los registros existentes no se le podría dar valor a la columna que queremos añadir.
Y como es difícil quedarse con la duda, quiero probar si realmente es esto último lo que provoca este comportamiento. Para comprobarlo añado una columna que no permite nulos configurando un valor por defecto para ese nuevo campo. Y efectivamente, la columna se crea desde el SSMS sin problemas.
BEGIN TRANSACTION
GO
ALTER TABLE dbo.E_PLANTILLA_PREG ADD
NUEVA_COL nchar(10) NOT NULL CONSTRAINT DF_E_PLANTILLA_PREG_NUEVA_COL DEFAULT N'A'
GO
ALTER TABLE dbo.E_PLANTILLA_PREG SET (LOCK_ESCALATION = TABLE)
GO
COMMIT
Uno se va tranquilo a la cama pensando que todo tiene su razón de ser. =)
No hay comentarios:
Publicar un comentario