sql таблицы Добавьте столбец в таблицу со значением по умолчанию, равным значению существующего столбца




добавить столбец в таблицу sql oracle (4)

Как добавить столбец в таблицу SQL Server со значением по умолчанию, равным значению существующего столбца?

Я пробовал эту инструкцию T-SQL:

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

но он дает ошибку:

В этом контексте имя «oldcolumn» не разрешено. Допустимыми выражениями являются константы, константные выражения и (в некоторых контекстах) переменные. Имена столбцов запрещены.


Попробуй это:

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

Подход триггера AFTER INSERT включает в себя накладные расходы из-за дополнительного оператора UPDATE . Я предлагаю использовать триггер INSTEAD OF INSERT следующим образом:

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

Это не работает, если oldcolumn является oldcolumn .


Я не очень люблю их, но вот как вы могли бы сделать это с помощью триггера 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   

Чтобы продлить ответ и избежать нежелательного ограничения по умолчанию, попробуйте следующее:

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

Замените -9999 на «noData», если ваш тип - varchar, nvarchar, datetime, ... или любыми совместимыми данными для других типов: конкретное значение не имеет значения, оно будет уничтожено второй инструкцией.





sql-server-2008