我正在尝试将列数据类型从text重命名为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
答案 0 :(得分:4)
不允许转换。将新列添加为ntext,然后将转换后的数据复制到新列,然后删除旧列。如果它是一个大表,可能会占用大量的磁盘空间! 您应该使用NVARCHAR(MAX)而不是NTEXT,以后将不再支持。
答案 1 :(得分:3)
我希望您需要复制数据 - 即添加一个临时列,填充它;放下旧柱子;添加新列,复制数据,删除临时列:
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
对于应用数据库范围,您可以从info-schema编写脚本(注意您应该过滤掉任何系统表等):
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'
答案 2 :(得分:0)
在MySQL中,查询是:
ALTER TABLE [tableName] CHANGE [oldColumnName] [newColumnName] [newColumnType];