Alterando o comprimento máximo de uma coluna varchar?


188

Estou tentando atualizar o comprimento de uma coluna varchar de 255 caracteres para 500 sem perder o conteúdo. Larguei e recriei tabelas antes, mas nunca fui exposto à declaração alter, que é o que acredito que preciso usar para fazer isso. Encontrei a documentação aqui: ALTER TABLE (Transfact-SQL), no entanto, não consigo entender o que é isso.

Até agora, tenho o seguinte (infelizmente nada basicamente):

alter table [progennet_dev].PROGEN.LE
alter column UR_VALUE_3

Como abordar isso? Existe uma documentação melhor para esta declaração (eu fiz algumas pesquisas por uma declaração de exemplo, mas fiquei vazia)?

Respostas:


362

Você precisa

ALTER TABLE YourTable ALTER COLUMN YourColumn <<new_datatype>> [NULL | NOT NULL]

Mas lembre-se de especificar NOT NULLexplicitamente, se desejar.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NOT NULL;

Se você deixar não especificado como abaixo ...

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500);

Em seguida, a coluna assumirá o padrão de permitir nulos, mesmo que tenha sido originalmente definido como NOT NULL. ou seja, omitir a especificação em um ALTER TABLE ... ALTER COLUMNé sempre tratado como.

ALTER TABLE YourTable ALTER COLUMN YourColumn VARCHAR (500) NULL;

Esse comportamento é diferente daquele usado para novas colunas criadas com ALTER TABLE(ou no CREATE TABLEmomento). A nulidade padrão depende das ANSI_NULL_DFLTconfigurações.


Você poderia explicar o objetivo de adicionar '[NOT] NULL' aqui? Apenas curiosidade, por que sua resposta não foi a de um Mitch?
Michael A


Então [NOT NULL] especifica que valores NULL - não podem ser colocados na coluna?
Michael A

3
@ Michael - Sem os colchetes, sim. Os colchetes indicam que um pouco de sintaxe é opcional. Se você omitir, permitir NULLé o padrão.
Martin Smith

1
classifiquei :) .. ALTER COLUMN MY_COL SET SET DATA TYPE VARCHAR (100)
Kdean571 9/15

26

Aumentar o tamanho da coluna com ALTERnão perderá nenhum dado:

alter table [progennet_dev].PROGEN.LE 
    alter column UR_VALUE_3 varchar(500) 

Como o @Martin aponta, lembre-se de especificar explicitamente NULL | NOT NULL


14

Você pode usar modify:

ALTER TABLE `table name` 
modify COLUMN `column name` varchar("length");

4
Isso é o que já foi publicado. Você gostaria de compartilhar algo novo?
Nico Haase

Também trabalha para MySQL e esta questão é marcado [TSQL] por isso é no lugar errado
jean

6
MODIFY é o que há de novo. ALTER COLUMN me deu um erro de sintaxe, mas MODIFY COLUMN funcionou para mim sem problemas.
KGBird

@KGBird - porque você não está usando o SQL Server. MODIFYé sintaxe para algum outro sistema de banco de dados que não a questão
Martin Smith

1

Usando a ferramenta Maria-DB e DB-Navigator dentro do IntelliJ, MODIFY Column funcionou para mim em vez de Alterar coluna


2
Quais são as novidades desta publicação na resposta fornecida por @Mitch Wheat em 12/01/12 às 1:37?
scopchanov 04/04/19

1
ALTER TABLE TABLE_NAME MODIFY COLUMN_NAME VARCHAR(40);

Atrasado para a pergunta - mas estou usando o Oracle SQL Developer e a resposta do @ anonymous foi a mais próxima, mas continuei recebendo erros de sintaxe até editar a consulta.

Espero que isso ajude alguém


(mudou alter para modificar e não há necessidade de definir column_name como coluna)
Jett

0

Eu também estava tendo dúvidas, o que funcionou para mim é

ALTER TABLE `your_table` CHANGE `property` `property` 
VARCHAR(whatever_you_want) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL;  

0

Isso funcionou para mim no db2:

alter table "JOBS"  alter column "JOB_TITLE" set  data type varchar(30);

0

Como alternativa, você pode salvar dados antigos e criar uma nova tabela com novos parâmetros.

ver imagem

No SQL Server Management Studio: "seu banco de dados" => tarefa => generatescripts => selecione o objeto específico do banco de dados => "sua tabela" => avançado => tipos de dados para script - esquema e dados => gerar

Pessoalmente, eu fiz isso.


-1

Para MariaDB, use a coluna de modificação :

ALTER TABLE table_name MODIFY COLUMN column_name VARCHAR (500);

Vai funcionar.


A pergunta é sobre servidor SQL
Martin Smith
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.