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


Ответы:


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

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


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


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 :

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


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
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.