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



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



я попробовал этот оператор T-SQL:



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


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




имя "oldcolumn" не допускается в этом контексте. Действительный
выражения являются константами, постоянными выражениями и (в некоторых
контексты) переменные. Имена столбцов не допускаются.


707   5  

5 ответов:

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

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

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

The 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 - это столбец автоидентификации.

направить Капилответ, и избежать нежелательного ограничения по умолчанию, попробуйте это:

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,... или любыми совместимыми данными для других типов: конкретное значение не имеет значения, оно будет стерто 2-й инструкцией.

Я думаю, что это будет работать, если вы используете Set Identity_Insert <TableName> OFF и после инструкции insert, которую вы написали, просто используйте Set Identity_Insert <TableName> ON.

Comments

    Ничего не найдено.