更改sql中的列数据类型

时间:2009-04-15 09:11:00

标签: sql-server-2005

我正在尝试将列数据类型从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

3 个答案:

答案 0 :(得分:4)

不允许转换。将新列添加为ntext,然后将转换后的数据复制到新列,然后删除旧列。如果它是一个大表,可能会占用大量的磁盘空间! 您应该使用NVARCHAR(MAX)而不是NTEXT,以后将不再支持。

Msg 4927

答案 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];