将 table 列数据类型从 image 转换为 varbinary

Convert table column data type from image to varbinary

我有一个 table 喜欢:

create table tbl ( 
  id int,
  data image
)

发现data列非常小,可以存储在varbinary(200)

所以新的 table 会是,

create table tbl ( 
    id int,
    data varbinary(200)
)

我如何才能将此 table 迁移到新设计 而不会丢失其中的数据。

您可以使用此 ALTER 语句将现有列 IMAGE 转换为 VARBINARY(MAX)Refer Here

ALTER Table tbl ALTER COLUMN DATA VARBINARY(MAX)

完成此转换后,您肯定会恢复数据。

注意:- 不要忘记在执行前进行备份。

IMAGE 数据类型已在未来版本 SQL SERVER 中弃用,需要尽可能转换为 VARBINARY(MAX)。

只需做两个单独的 ALTER TABLE,因为您只能将 image 转换为 varbinary(max),但之后您可以更改其长度:

create table tbl ( 
  id int,
  data image
)
go
insert into tbl(id,data) values
(1,0x0101010101),
(2,0x0204081632)
go
alter table tbl alter column data varbinary(max)
go
alter table tbl alter column data varbinary(200)
go
select * from tbl

结果:

id          data
----------- ---------------
1           0x0101010101
2           0x0204081632

varbinary 创建一个 NewTable,然后将 OldTable 中的数据复制到其中如何?

INSERT INTO [dbo].[NewTable] ([id], [data])
            SELECT  [id], [image] FROM  [dbo].[OldTable]

首先来自BOL:

image: Variable-length binary data from 0 through 2^31-1 (2,147,483,647) bytes.

图像数据类型本质上是 varbinary (2GB) 的别名,因此将其转换为 varbinary(max) 应该不会导致数据丢失。

但可以肯定的是:

  1. 备份现有数据
  2. 添加一个新字段 (varbinary(max))
  3. 将数据从旧字段复制到新字段
  4. 将字段与 sp_rename
  5. 交换
  6. 测试
  7. 测试成功后,删除旧列