Як змінити тип даних стовпця в SQL Server?


Відповіді:


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

EDIT Як зазначалося, NULL / NOT NULL слід було вказати, див . Також відповідь Роба .


1
Чому це слід вказати? Яка користь? Все, що я хочу залишити таким, яким я є, я не повинен згадувати, я думаю.
Неймовірний січень

5
@TheincredibleJan Це було б круто, але, на жаль, це не працює так. Якщо ви видасте ALTER TABLE TableName ALTER COLUMN ColumnNameкоманду змінити існуючий стовпець, який [NOT NULL]ви не встановите, явно не вказати, це буде [NULL]згодом, оскільки це за замовчуванням.
takrl

4
Це працює лише в тому випадку, якщо у вас немає обмежень та покажчиків для цього стовпця, інакше вам потрібно відкинути все і відтворити його, що є копіткою і бурхливою роботою, особливо якщо у вас є багато іноземних посилань на цей стовпець. наприклад, при переході від tinyint до int.
Hrvoje Batrnek

Будьте уважні, якщо у вас відкрита IDE (наприклад, SSMS). Навіть із закритою вкладкою «Дизайнер» на Таблиці, яку я змінював (після запуску сценарію та клацання правою кнопкою миші на таблиці, щоб вибрати «Дизайн»), він все ще показував старі типи даних! Лише після закриття ВСІХ вкладок у студії управління та відкриття дизайнерського перегляду знову з'явився оновлений 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 після завершення виконання таблиці змінної таблиці, не чітко визначаючи, якою вона повинна бути.
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

Поки ви збільшуєте розмір варчара, ви все в порядку. Відповідно до посилання на таблицю Alter :

Зменшення точності або масштабу стовпця може спричинити усічення даних.


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.