我有一张表:
create table tbl (
id int,
data image
)
我们发现data
列的尺寸非常小,可以存储在varbinary(200)
所以新表将是,
create table tbl (
id int,
data varbinary(200)
)
如何将此表格迁移到新设计 而不会丢失其中的数据。
答案 0 :(得分:4)
只需执行两个单独的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
答案 1 :(得分:2)
您可以使用此ALTER语句将现有列IMAGE
转换为VARBINARY(MAX)
。 Refer Here
ALTER Table tbl ALTER COLUMN DATA VARBINARY(MAX)
转换完毕后,您肯定会撤消数据。
注意: - 执行前不要忘记备份。
在将来的SQL SERVER版本中不推荐使用IMAGE数据类型,并且只要有可能就需要将其转换为VARBINARY(MAX)。
答案 2 :(得分:1)
如何使用NewTable
创建varbinary
,然后将OldTable
中的数据复制到其中?
INSERT INTO [dbo].[NewTable] ([id], [data])
SELECT [id], [image] FROM [dbo].[OldTable]
答案 3 :(得分:1)
首先来自BOL:
image:从0到2 ^ 31-1的可变长度二进制数据 (2,147,483,647)字节。
图像数据类型本质上是varbinary(2GB)的别名,因此将其转换为varbinary(max)不应导致数据丢失。
但可以肯定: