Изменить тип столбца в sql - PullRequest
4 голосов
/ 15 апреля 2009

Я пытаюсь переименовать тип данных столбца из текста в ntext, но получаю ошибку

Msg 4927, Level 16, State 1, Line 1
Cannot alter column 'ColumnName' to be data type ntext.

запрос, который я использую, выглядит следующим образом: -

alter table tablename alter column columnname ntext null

Ответы [ 3 ]

4 голосов
/ 15 апреля 2009

Преобразование не допускается. Добавьте новый столбец как ntext, затем скопируйте преобразованные данные в новый столбец, затем удалите старый столбец. Может занять много места на диске, если это большой стол! Вы должны использовать NVARCHAR (MAX) вместо NTEXT, который не будет поддерживаться в будущем.

Сообщение 4927

3 голосов
/ 15 апреля 2009

Полагаю, вам нужно скопировать данные - то есть добавить пустую колонку, заполнить ее; бросьте старый столбец; добавьте новый столбец, скопируйте данные обратно, удалите пустой столбец:

ALTER TABLE TableName ADD tmp text NULL
GO
UPDATE TableName SET tmp = ColumnName
GO
ALTER TABLE TableName DROP COLUMN ColumnName
GO
ALTER TABLE TableName ADD ColumnName ntext NULL
GO
UPDATE TableName SET ColumnName = tmp
GO
ALTER TABLE TableName DROP COLUMN tmp

Для применения всей базы данных вы можете записать его из информационной схемы (обратите внимание, вы должны отфильтровать любые системные таблицы и т. Д.):

SELECT 'ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME+ '] ADD [__tmp] text NULL
GO
UPDATE [' + TABLE_SCHEMA + '].[' + TABLE_NAME+ '] SET [__tmp] = [' + COLUMN_NAME + ']
GO
ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME+ '] DROP COLUMN [' + COLUMN_NAME + ']
GO
ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME+ '] ADD [' + COLUMN_NAME + '] ntext ' +
    CASE IS_NULLABLE WHEN 'YES' THEN 'NULL' ELSE 'NOT NULL' END + '
GO
UPDATE [' + TABLE_SCHEMA + '].[' + TABLE_NAME+ '] SET [' + COLUMN_NAME + '] = [__tmp]
GO
ALTER TABLE [' + TABLE_SCHEMA + '].[' + TABLE_NAME+ '] DROP COLUMN [__tmp]'
FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE = 'text'
0 голосов
/ 15 апреля 2009

В MySQL запрос:

ALTER TABLE [tableName] CHANGE [oldColumnName] [newColumnName] [newColumnType];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...