Добавление столбца в таблицу со значением по умолчанию, равным значению существующего столбца
Как добавить столбец в таблицу SQL Server со значением по умолчанию, равным значению существующего столбца?
я попробовал этот оператор T-SQL:
ALTER TABLE tablename
ADD newcolumn type NOT NULL DEFAULT (oldcolumn)
но это дает ошибку:
имя "oldcolumn" не допускается в этом контексте. Действительный
выражения являются константами, постоянными выражениями и (в некоторых
контексты) переменные. Имена столбцов не допускаются.
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