¿Cómo se cambia el tipo de datos de una columna en SQL Server?


Respuestas:


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

EDITAR Como se indicó NULL / NOT NULL debería haberse especificado, vea también la respuesta de Rob .


1
¿Por qué debería especificarse? ¿Cuál es el beneficio? Creo que no tengo que mencionar todo lo que quiero dejar como está.
El increíble Jan

55
@ TheincredibleJan Eso sería genial, pero desafortunadamente no funciona de esa manera. Si emite un ALTER TABLE TableName ALTER COLUMN ColumnNamecomando para cambiar una columna existente que es [NOT NULL], y no lo especifica explícitamente, será [NULL]después, ya que ese es el valor predeterminado.
takrl

44
Esto solo funciona si no tiene restricciones e índices en esa columna, de lo contrario, debe soltar todo y volver a crearlo, lo cual es un trabajo tedioso y duro, especialmente si tiene muchas referencias foráneas en esa columna. por ejemplo, cuando se cambia de tinyint a int.
Hrvoje Batrnek

Tenga cuidado si tiene un IDE abierto (como SSMS). Incluso con mi pestaña de diseñador cerrada en la tabla que estaba alterando (después de ejecutar el script y hacer clic derecho en la tabla para seleccionar "Diseño"), ¡todavía mostraba los tipos de datos antiguos! Fue solo después de cerrar TODAS mis pestañas en Management Studio y abrir nuevamente la Vista de diseño que finalmente mostró el DataType actualizado. Muy aterrador, así que tenga cuidado (puede ser un error de caché que ya está solucionado o una MS nunca se molesta en arreglarlo). Para aquellos que se preguntan por qué ejecuté T-SQL cuando uso Design-View, quería alterar mis DataTypes SysName(que SSMS no permite).
MikeTeeVee

No tuve suerte con estos comandos en XAMPP. ALTER TABLE table MODIFY COLUMN column datatypetrabajó para mi.
Pavindu

173

No olvides la nulabilidad.

ALTER TABLE <schemaName>.<tableName>
ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]

2
¿Cuál es el problema con la nulabilidad? Si no quiero cambiarlo, ¿cuál es el beneficio de configurarlo nuevamente?
El increíble Jan

77
^ Por defecto será NULL después de que la instrucción alter table termine de ejecutarse sin definir explícitamente lo que debería ser.
sc305495

1
@ sc305495 ​​Para ser exactos, el valor predeterminado será cualquiera que sea su configuración ANSI_NULL_DEFAULT.
Zikato

23

Utilice la declaración de la tabla Alter.

Alter table TableName Alter Column ColumnName nvarchar(100)

13

La sintaxis para modificar una columna en una tabla existente en SQL Server (Transact-SQL) es:

ALTER TABLE table_name
    ALTER COLUMN column_name column_type;

Por ejemplo:

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

Este ALTER TABLEejemplo de SQL Server modificará la columna llamada last_namepara ser un tipo de datos VARCHAR(75)y forzará a la columna a no permitir valores nulos.

mira aquí


1
¡agregue más información a su respuesta y formatee el código / consulta!
Sebastian Brosch

4

Mientras aumentes el tamaño de tu varchar, estarás bien. Según la referencia de Alter Table :

Reducir la precisión o la escala de una columna puede causar el truncamiento de datos.


3

Para cambiar el tipo de datos

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

Para cambiar la clave primaria

ALTER TABLE table_name  
ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)

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

Esto no parece agregar nada sobre la respuesta aceptada existente de hace años, y también los cambios que ha publicado en la estructura de la tabla en realidad no coinciden con la pregunta.
PeterJ

-11

Prueba esto:

ALTER TABLE "table_name"
MODIFY "column_name" "New Data Type";

1
"Modificar" obviamente no es correcto. Por favor compare con otras respuestas.
Frank

3
Esto es antiguo, pero parece que Kai Tzer estaba probando MySql y / o Oracle DDL.
Sheldon Cohen

1
De acuerdo con Sheldon, las respuestas aquí no me ayudaron con
Oracle
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.