valor una tabla por nombre modificar insertar entre eliminar como columnas columna campos campo cambiar alterar agregar sql sql-server-2008

por - insertar campos en una tabla sql



Agregue una columna a una tabla con un valor predeterminado igual al valor de una columna existente (5)

¿Cómo agregar una columna a una tabla de SQL Server con un valor predeterminado que es igual al valor de una columna existente?

Intenté esta declaración de T-SQL:

ALTER TABLE tablename ADD newcolumn type NOT NULL DEFAULT (oldcolumn)

pero está dando un error:

El nombre "oldcolumn" no está permitido en este contexto. Las expresiones válidas son constantes, expresiones constantes y (en algunos contextos) variables. No se permiten los nombres de columna.


Creo que funcionará si usa Set Identity_Insert <TableName> OFF y después de insertar la Set Identity_Insert <TableName> OFF que escribió solo use Set Identity_Insert <TableName> ON .


El enfoque desencadenante AFTER INSERT implica una sobrecarga debido a la instrucción UPDATE adicional. Sugiero usar un disparador INSTEAD OF INSERT , de la siguiente manera:

CREATE TRIGGER tablename_on_insert ON tablename INSTEAD OF INSERT AS INSERT INTO tablename (oldcolumn, newcolumn) SELECT oldcolumn, ISNULL(newcolumn, oldcolumn) FROM inserted

Sin embargo, esto no funciona si oldcolumn es una columna de identidad automática.


No me gustan mucho, pero he aquí cómo puedes hacer esto con un disparador AFTER INSERT :

CREATE TRIGGER TableX_AfterInsert_TRG ON TableX AFTER INSERT AS UPDATE TableX AS t SET t.newcolumn = t.oldcolumn FROM Inserted AS i WHERE t.PK = i.PK ; -- where PK is the PRIMARY KEY of the table


Para extender la respuesta de y evitar la restricción predeterminada no deseada, intente esto:

ALTER TABLE tablename ADD newcolumn type NOT NULL CONSTRAINT DF_TMP_TABLENAME_NEWCOLUMN DEFAULT -9999 Go Update tablename SET newcolumn = oldcolumn Go ALTER TABLE tablename DROP CONSTRAINT DF_TMP_TABLENAME_NEWCOLUMN Go

Reemplace -9999 por ''noData'' si su tipo es varchar, nvarchar, datetime, ... o por cualquier dato compatible para otros tipos: el valor específico no importa, será borrado por la 2da instrucción.


Prueba esto:

ALTER TABLE tablename ADD newcolumn type NOT NULL DEFAULT (0) Go Update tablename SET newcolumn = oldcolumn Where newcolumn = 0 Go