我想知道如果任何人都可以给我这个问题的指针。我假设其他人以前经历过这种情况,并且想知道什么是最有效的。最佳/最有效的方式为nvarchar(最大)转换到为nvarchar(30)
我有一个正在相当长的处理,主要是因为我们还没有设置一个ID字段索引生产数据。
ID字段是目前为nvarchar(最大),所以它不能被索引。此ID不超过30个字符,因此我想将数据类型更改为nvarchar(30)。但是,我注意到使用诸如以下语句:
ALTER TABLE [dbo].[Table] ALTER COLUMN [Column1] NVARCHAR (30) NOT NULL
已经为较小的表占用大量时间。我担心它可能不适用于较大的表格,因为DiskIO对于较小的表格已经非常高。
请问以下是更快,可能它的工作?
- 使用nvarchar(30)数据类型创建一个新列。
- 然后将数据从nvarchar(max)列复制到nvarchar(30)列。
- 然后删除nvarchar(max)列。
- 然后将nvarchar(30)列重命名为nvarchar(max)列的名称?
有没有人有任何建议,什么可能是更好?
任何指针/帮助将不胜感激!
我会建议将数据复制到另一个位置,截断表,数据类型的改变,并重新插入数据。你需要做最后一部分的日志记录或使用'bulk insert'。 –
可能的重复[SQL Server性能改变表alter column更改数据类型](https://stackoverflow.com/questions/4311559/sql-server-performance-for-alter-table-alter-column-change-data-类型) – Joey