Como adicionar uma coluna a uma tabela do SQL Server com um valor padrão igual ao valor de uma coluna existente?
Tentei esta instrução T-SQL:
ALTER TABLE tablename
ADD newcolumn type NOT NULL DEFAULT (oldcolumn)
mas está dando um erro:
O nome "oldcolumn" não é permitido neste contexto. As expressões válidas são constantes, expressões constantes e (em alguns contextos) variáveis. Nomes de colunas não são permitidos.
sql
sql-server-2008
fazes
fonte
fonte
UPDATE
, então, eu temo.Respostas:
Experimente isto:
fonte
Não gosto muito deles, mas aqui está como você pode fazer isso com um
AFTER INSERT
gatilho:fonte
A
AFTER INSERT
abordagem do gatilho envolve sobrecarga devido àUPDATE
instrução extra . Eu sugiro usar umINSTEAD OF INSERT
gatilho, como segue:Porém, isso não funciona se
oldcolumn
for uma coluna de identidade automática.fonte
INSTEAD OF
gatilhos também não funcionam ao usar tabelas temporais:SYSTEM_VERSIONING = ON
Para estender a resposta de Kapil e evitar a restrição padrão indesejada, tente o seguinte:
Substitua -9999 por 'noData' se seu tipo for varchar, nvarchar, datetime, ... ou por qualquer dado compatível para outros tipos: o valor específico não importa, ele será apagado pela 2ª instrução.
fonte
Você pode usar a coluna computada para inserir uma nova coluna em uma tabela com base em um valor de coluna existente
OU, se você quiser fazer algumas alterações no valor com base no valor da coluna existente, use
fonte
Para o meu caso, quero adicionar uma nova coluna exclusiva não nula chamada CODE, mas não sei sobre o valor no momento da criação. Eu defino o valor padrão para ele obtendo um valor padrão de NewID () e atualizando mais tarde.
fonte
Acho que vai funcionar se você usar
Set Identity_Insert <TableName> OFF
e após a instrução insert que você escreveu basta usarSet Identity_Insert <TableName> ON
.fonte