Como posso adicionar uma coluna com um valor padrão a uma tabela existente no SQL Server 2000 / SQL Server 2005 ?
sql
sql-server
sql-server-2005
sql-server-2000
Mathias
fonte
fonte
Respostas:
Sintaxe:
Exemplo:
Notas:
Nome de restrição opcional:
se você deixar de fora
CONSTRAINT D_SomeTable_SomeCol
, o SQL Server gerará automaticamenteum Contraint padrão com um nome engraçado, como:
DF__SomeTa__SomeC__4FB7FEF6
Opcional Declaração com valores:
A
WITH VALUES
só é necessária quando sua coluna é anulávele você quer o Valor padrão usado para existente Records.
Se sua coluna for
NOT NULL
, ela usará automaticamente o Valor padrãopara todos os registros existentes, independentemente de você especificar
WITH VALUES
ou não.Como as inserções funcionam com uma restrição padrão:
se você inserir um registro
SomeTable
e não especificarSomeCol
o valor de Especificar , será padrão para0
.Se você inserir um valor de Registro e Especificar
SomeCol
comoNULL
(e sua coluna permitir nulos),a restrição padrão não será usada e
NULL
será inserida como o valor.As notas foram baseadas no excelente feedback de todos abaixo.
Agradecimentos especiais a:
@Yatrix, @WalterStabosz, @YahooSerious e @StackMan por seus comentários.
fonte
NOT NULL
. Por favor, tente o seguinte:create table blah(a int not null primary key clustered); insert blah values (1), (2); alter table blah add b int null constraint df_blah_b default (0); select * from blah;
Você verá 2 valores NULL para a colunab
.WITH VALUES
para atualizar linhas anuláveis existentes. Consulte MSDN : "Se a coluna adicionada permitir valores nulos eWITH VALUES
for especificada, o valor padrão será armazenado na nova coluna, adicionada às linhas existentes".A inclusão de PADRÃO preenche a coluna nas linhas existentes com o valor padrão, portanto, a restrição NOT NULL não é violada.
fonte
Ao adicionar uma coluna anulável ,
WITH VALUES
garantirá que o valor DEFAULT específico seja aplicado às linhas existentes:fonte
DEFAULT
restrição sempre terá um valor - ou seja, não será NULL, mesmo queNOT NULL
não esteja especificada.BIT
tipo de dados, estava falando sobre essaBIT
coluna em particular . Veja a resposta, a coluna é declarada comoNOT NULL
.fonte
fonte
Cuidado quando a coluna que você está adicionando possui uma
NOT NULL
restrição, mas ainda não possui umaDEFAULT
restrição (valor). AALTER TABLE
instrução falhará nesse caso, se a tabela tiver alguma linha nela. A solução é remover aNOT NULL
restrição da nova coluna ou fornecer umaDEFAULT
restrição para ela.fonte
A versão mais básica com apenas duas linhas
fonte
Usar:
fonte
Se você deseja adicionar várias colunas, pode fazê-lo desta maneira, por exemplo:
fonte
Usar:
Referência: ALTER TABLE (Transact-SQL) (MSDN)
fonte
Para adicionar uma coluna a uma tabela de banco de dados existente com um valor padrão, podemos usar:
Aqui está outra maneira de adicionar uma coluna a uma tabela de banco de dados existente com um valor padrão.
Um script SQL muito mais completo para adicionar uma coluna com um valor padrão está abaixo, incluindo verificar se a coluna existe antes de adicioná-la e também verificar a restrição e descartá-la, se houver uma. Esse script também nomeia a restrição para que possamos ter uma boa convenção de nomenclatura (eu gosto de DF_) e, caso contrário, o SQL nos fornecerá uma restrição com um nome que tenha um número gerado aleatoriamente; portanto, é bom poder nomear a restrição também.
Estas são duas maneiras de adicionar uma coluna a uma tabela de banco de dados existente com um valor padrão.
fonte
Você pode fazer o que quiser com o T-SQL da seguinte maneira.
Além disso, você também pode usar o SQL Server Management Studio clicando com o botão direito do mouse na tabela no menu Design, definindo o valor padrão como tabela.
Além disso, se você deseja adicionar a mesma coluna (se não existir) a todas as tabelas no banco de dados, use:
fonte
No SQL Server 2008-R2, vou para o modo de design - em um banco de dados de teste - e adiciono minhas duas colunas usando o designer e defini as configurações com a GUI e, em seguida, o infame Right-Clickfornece a opção " Gerar script de alteração "!
Bang up aparece uma pequena janela com, você adivinhou, o script de alteração garantido para o trabalho formatado corretamente. Aperte o botão fácil.
fonte
Como alternativa, você pode adicionar um padrão sem precisar nomear explicitamente a restrição:
Se você tiver um problema com as restrições padrão existentes ao criar essa restrição, elas poderão ser removidas por:
fonte
Isso também pode ser feito na GUI do SSMS. Eu mostro uma data padrão abaixo, mas o valor padrão pode ser o que for, é claro.
(getdate())
ouabc
ou0
o valor que você deseja no campo Valor padrão ou Ligação , conforme mostrado abaixo:fonte
O artigo do MSDN ALTER TABLE (Transact-SQL) possui toda a sintaxe da tabela de alteração.
fonte
Exemplo:
fonte
Exemplo:
fonte
Primeiro, crie uma tabela com o nome student:
Adicione uma coluna a ela:
A tabela é criada e uma coluna é adicionada a uma tabela existente com um valor padrão.
fonte
Isso tem muitas respostas, mas sinto a necessidade de adicionar esse método estendido. Isso parece muito mais longo, mas é extremamente útil se você estiver adicionando um campo NOT NULL a uma tabela com milhões de linhas em um banco de dados ativo.
O que isso fará é adicionar a coluna como um campo anulável e com o valor padrão, atualizar todos os campos para o valor padrão (ou você pode atribuir valores mais significativos) e, finalmente, ela mudará a coluna para NÃO NULL.
A razão para isso é que, se você atualizar uma tabela de grande escala e adicionar um novo campo não nulo, ele deverá ser gravado em todas as linhas e, dessa forma, bloqueará a tabela inteira à medida que adiciona a coluna e, em seguida, grava todos os valores.
Este método adicionará a coluna anulável, que opera muito mais rapidamente, e preenche os dados antes de definir o status não nulo.
Descobri que fazer a coisa toda em uma instrução bloqueará uma de nossas tabelas mais ativas por 4-8 minutos e, muitas vezes, eu acabei com o processo. Esse método de cada parte geralmente leva apenas alguns segundos e causa um bloqueio mínimo.
Além disso, se você tiver uma tabela na área de bilhões de linhas, poderá valer a atualização em lotes da seguinte maneira:
fonte
Tente isto
fonte
SQL Server + Alterar tabela + Adicionar coluna + Valor padrão uniqueidentifier
fonte
fonte
NOT EXISTS
verificação antes de tentar alterar a tabela. Solução muito boa. Alguns comentários adicionais sobre como isso funciona tornariam ainda mais úteis.fonte
Adicione uma nova coluna a uma tabela:
Por exemplo,
Se o usuário quiser incrementá-lo automaticamente, então:
fonte
Isto é para o SQL Server:
Exemplo:
Se você deseja adicionar restrições, então:
fonte
Isso pode ser feito pelo código abaixo.
fonte
Tente com a consulta abaixo:
Isso adicionará uma nova coluna à tabela.
fonte
Nesta consulta, você pode adicionar uma coluna do tipo de dados número inteiro com o valor padrão 0.
fonte
Bem, agora eu tenho algumas modificações na minha resposta anterior. Percebi que nenhuma das respostas mencionadas
IF NOT EXISTS
. Então, vou fornecer uma nova solução, pois enfrentei alguns problemas ao alterar a tabela.Aqui
TaskSheet
está o nome da tabela em particular eIsBilledToClient
a nova coluna que você irá inserir e1
o valor padrão. Isso significa na nova coluna qual será o valor das linhas existentes; portanto, uma será definida automaticamente lá. No entanto, você pode alterar como desejar com o respeito do tipo de coluna como eu useiBIT
, então coloquei no valor padrão 1.Sugiro o sistema acima, porque enfrentei um problema. Então qual é o problema? O problema é que, se a
IsBilledToClient
coluna existir na tabela, se você executar apenas a parte do código fornecida abaixo, verá um erro no construtor Query do SQL Server. Mas se ele não existir, pela primeira vez, não haverá erro ao executar.fonte