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