我需要使用类似这样的简单查询将活动数据库上的某些列从 nText 更改为 Nvarchar(max)
ALTER TABLE [dbo].[Table] ALTER COLUMN [Column] nvarchar(max);
但我的问题是,在生产环境中对数据库执行此操作是否安全?表从 50 行到 200 万行不等。要回答这个问题,我认为我的问题应该是:
当您将 Ntext 数据类型列更改为 Nvarchar(max) 时,SQL 服务器在后台执行什么操作?
我曾尝试寻找有关此问题的阅读材料,但没有任何收获。
答案1
由于内部存储方式,这是一个表重建。不过,200 万行数据还不算太糟,所以只需要几分钟
我会考虑以不同的方式进行操作以允许批处理并确保所有数据都转换正常。
ALTER TABLE [dbo].[Table] ADD [ColumnTemp] nvarchar(max);
GO
UPDATE [dbo].[Table] SET ColumnTemp = Column
GO
ALTER TABLE [dbo].[Table] DROP COLUMN Column
GO
EXEC sp_rename 'dbo.Table.ColumnTemp', 'Column', 'COLUMN'
GO