Как изменить тип данных столбца в SQL Server?

Ответы:

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

РЕДАКТИРОВАТЬ Как отмечалось, NULL / NOT NULL должны были быть указаны, см . Ответ Роба .

cmsjr
источник
1
Почему это должно быть указано? В чем выгода? Думаю, мне не нужно упоминать обо всем, что я хочу оставить.
Невероятный Янв
5
@TheincredibleJan Это было бы круто, но, к сожалению, так не работает. Если вы введете ALTER TABLE TableName ALTER COLUMN ColumnNameкоманду, чтобы изменить существующий столбец [NOT NULL], и вы не укажете ее явно, это будет [NULL]после, как это по умолчанию.
Такрл
4
Это работает, только если у вас нет ограничений и индексов для этого столбца, в противном случае вам нужно все отбросить и воссоздать его, что является утомительной и трудоемкой работой, особенно если у вас много внешних ссылок на этот столбец. например, при переходе от tinyint к int.
Хроее Батрнек
Будьте осторожны, если у вас открыта IDE (например, SSMS). Даже при закрытой вкладке «Дизайнер» в Таблице, которую я изменял (после запуска сценария и щелчка правой кнопкой мыши по Таблице для выбора «Дизайн»), он все равно отображал старые типы данных! Только после закрытия ВСЕХ моих вкладок в Management Studio и повторного открытия представления «Дизайн» наконец-то отобразился обновленный DataType. Очень страшно, так что будьте осторожны (это может быть ошибка кеша, которая уже исправлена, или одна MS не исправляет ошибки). Для тех, кто интересуется, почему я запускаю T-SQL, когда я использую Design-View, я хотел изменить свои DataTypes на SysName(что SSMS не позволяет).
MikeTeeVee
Мне не повезло с этими командами в XAMPP. ALTER TABLE table MODIFY COLUMN column datatypeработал на меня.
Павинду
173

Не забывайте об обнуляемости.

ALTER TABLE <schemaName>.<tableName>
ALTER COLUMN <columnName> nvarchar(200) [NULL|NOT NULL]
Роб Гаррисон
источник
2
Что случилось с обнуляемостью? Если я не хочу его менять - какая польза от повторной настройки?
Невероятный январь
7
^ Он будет по умолчанию равен NULL после того, как оператор alter table завершит выполнение без явного определения того, каким он должен быть.
sc305495
1
@ sc305495 ​​Если быть точным, то по умолчанию будет установлено значение ANSI_NULL_DEFAULT.
Zikato
23

Используйте оператор таблицы Alter.

Alter table TableName Alter Column ColumnName nvarchar(100)
Джон Сансом
источник
13

Синтаксис для изменения столбца в существующей таблице в SQL Server (Transact-SQL):

ALTER TABLE table_name
    ALTER COLUMN column_name column_type;

Например:

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

В этом ALTER TABLEпримере SQL Server будет изменен столбец, last_nameкоторый будет называться типом данных, VARCHAR(75)и будет принудительно запрещать использование пустых значений.

смотрите здесь

Йогеш Бенд
источник
1
пожалуйста, добавьте больше информации к вашему ответу и отформатируйте код / ​​запрос!
Себастьян Брош
4

Пока вы увеличиваете размер своего varchar, вы в порядке. Согласно справке Alter Table :

Уменьшение точности или масштаба столбца может привести к усечению данных.

jocassid
источник
3

Для изменения типа данных

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

Для изменения первичного ключа

ALTER TABLE table_name  
ADD CONSTRAINT PK_MyTable PRIMARY KEY (column_name)
Александр Залдостанов
источник
1
ALTER TABLE [dbo].[TableName]
ALTER COLUMN ColumnName VARCHAR(Max) NULL
Мухаммед Омаир
источник
Похоже, это ничего не добавляет к существующему принятому ответу, принятому много лет назад, а также изменения, которые вы опубликовали в структуре таблицы, на самом деле не соответствуют вопросу.
PeterJ
-11

Попробуй это:

ALTER TABLE "table_name"
MODIFY "column_name" "New Data Type";
Кай Цер
источник
1
«Изменить», очевидно, не правильно. Пожалуйста, сравните с другими ответами.
Фрэнк
3
Это старый, но кажется, что Кай Цер доказывал MySql и / или Oracle DDL.
Шелдон Коэн
1
Согласитесь с Шелдоном, ответы здесь не помогли мне с оракулом sql, только это
AsfK