将表列数据类型从图像转换为varbinary

Pra*_*een 3 sql t-sql sql-server alter-table sql-server-2014

我有一张像这样的桌子:

create table tbl ( 
  id int,
  data image
)
Run Code Online (Sandbox Code Playgroud)

发现该列的data尺寸很小,可以存储在varbinary(200)

因此,新表将是

create table tbl ( 
    id int,
    data varbinary(200)
)
Run Code Online (Sandbox Code Playgroud)

如何在不丢失表中数据的情况下将该表迁移到新设计

Hav*_*ame 5

您可以使用此 ALTER 语句将现有列转换IMAGEVARBINARY(MAX). 参考这里

ALTER Table tbl ALTER COLUMN DATA VARBINARY(MAX)
Run Code Online (Sandbox Code Playgroud)

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

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

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


Dam*_*ver 5

只需执行两个单独的ALTER TABLEs,因为您只能将转换imagevarbinary(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
Run Code Online (Sandbox Code Playgroud)

结果:

id          data
----------- ---------------
1           0x0101010101
2           0x0204081632
Run Code Online (Sandbox Code Playgroud)