Como você altera o tipo de dados de uma coluna no SQL Server?

Respostas:

564
ALTER TABLE TableName 
ALTER COLUMN ColumnName NVARCHAR(200) [NULL | NOT NULL]

EDIT Como NULL / NOT NULL deveria ter sido especificado, consulte a resposta de Rob também.

cmsjr
fonte
11
Por que deveria ser especificado? Qual o benefício? Tudo o que quero deixar como está, não preciso mencionar, acho.
A incrível Jan
5
@TheincredibleJan Isso seria legal, mas infelizmente não funciona dessa maneira. Se você emitir um ALTER TABLE TableName ALTER COLUMN ColumnNamecomando para alterar uma coluna existente [NOT NULL]e não a especificar explicitamente, será [NULL]depois, pois esse é o padrão.
precisa saber é
4
Isso funciona apenas se você não tiver restrições e índices nessa coluna; caso contrário, será necessário descartar tudo e recriá-lo, o que é um trabalho tedioso e difícil, especialmente se você tiver muitas referências estrangeiras nessa coluna. por exemplo, ao mudar de tinyint para int.
Hrvoje Batrnek
Cuidado se você tiver um IDE aberto (como SSMS). Mesmo com minha guia Designer fechada na tabela, eu estava alterando (depois de executar o script e clicar com o botão direito do mouse na tabela para selecionar "Design"), ele ainda mostrava os tipos de dados antigos! Somente depois de fechar TODAS as minhas guias no Management Studio e abrir o Design View novamente, ele finalmente mostrou o DataType atualizado. Muito assustador, tenha cuidado (pode ser um bug de cache corrigido agora ou um MS nunca se preocupa em corrigir). Para aqueles que se perguntam por que executei o T-SQL ao usar o Design-View, desejei alterar meus DataTypes para SysName(que o SSMS não permite).
MikeTeeVee
Não tive sorte com esses comandos no XAMPP. ALTER TABLE table MODIFY COLUMN column datatypetrabalhou para mim.
Pavindu 6/05/19
173

Não se esqueça da nulidade.

ALTER TABLE <schemaName>.<tableName>
ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]
Rob Garrison
fonte
2
Qual é o problema com a nulidade? Se não quiser alterá-lo - qual é o benefício em configurá-lo novamente?
O incrível Jan
7
^ Ele será padronizado como NULL depois que a instrução alter table terminar a execução sem definir explicitamente o que deveria ser.
sc305495
11
@ sc305495 ​​Para ser exato, o padrão será o que quer que sejam suas configurações ANSI_NULL_DEFAULT.
Zikato 15/04/19
23

Use a instrução Alter table.

Alter table TableName Alter Column ColumnName nvarchar(100)
John Sansom
fonte
13

A sintaxe para modificar uma coluna em uma tabela existente no SQL Server (Transact-SQL) é:

ALTER TABLE table_name
    ALTER COLUMN column_name column_type;

Por exemplo:

ALTER TABLE employees
    ALTER COLUMN last_name VARCHAR(75) NOT NULL;

Este ALTER TABLEexemplo do SQL Server modificará a coluna chamada last_namepara ser um tipo de dados VARCHAR(75)e forçará a coluna a não permitir valores nulos.

veja aqui

Yogesh Bende
fonte
11
adicione mais informações à sua resposta e formate o código / consulta!
Sebastian Brosch
4

Contanto que você esteja aumentando o tamanho do seu varchar, estará bem. De acordo com a referência da tabela Alter :

Reduzir a precisão ou a escala de uma coluna pode causar truncamento de dados.

jocassid
fonte
3

Para alterar o tipo de dados

alter table table_name 
alter column column_name datatype [NULL|NOT NULL]

Para alterar a chave primária

ALTER TABLE table_name  
ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)
Alexander Zaldostanov
fonte
1
ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL
Muhammad Omair
fonte
Isso não parece acrescentar nada à resposta aceita existente de anos atrás, e também as alterações que você postou na estrutura da tabela não correspondem à pergunta.
PeterJ
-11

Tente o seguinte:

ALTER TABLE "table_name"
MODIFY "column_name" "New Data Type";
Kai Tzer
fonte
11
"Modificar" obviamente não está correto. Por favor, compare com outras respostas.
Frank
3
Isso é antigo, mas parece que o Kai Tzer estava provando o MySql e / ou o Oracle DDLs.
Sheldon Cohen
11
Concordar com Sheldon, as respostas aqui não me ajudou com Oracle SQL, apenas isso
AsfK