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.


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]

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)

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


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.


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)

1
ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL

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";

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
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.