我有一个表,如:转换表列数据类型VARBINARY
create table tbl (
id int,
data image
)
它发现列data
具有非常小的尺寸,它可以存储在varbinary(200)
所以新表会,
create table tbl (
id int,
data varbinary(200)
)
我怎么能这个表迁移到新的设计没有松动ŧ他的数据在里面。
我有一个表,如:转换表列数据类型VARBINARY
create table tbl (
id int,
data image
)
它发现列data
具有非常小的尺寸,它可以存储在varbinary(200)
所以新表会,
create table tbl (
id int,
data varbinary(200)
)
我怎么能这个表迁移到新的设计没有松动ŧ他的数据在里面。
只是做两个独立的ALTER TABLE
S,因为你只能转换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
您可以使用此ALTER语句现有列IMAGE
转换为VARBINARY(MAX)
。 Refer Here
ALTER Table tbl ALTER COLUMN DATA VARBINARY(MAX)
这种转换后,您肯定,让您的数据回退。
注意: - 执行前不要忘记备份。
IMAGE数据类型在未来版本的SQL SERVER中已被弃用,并且需要尽可能转换为VARBINARY(MAX)。
如何创建一个NewTable
与varbinary
,然后将数据从OldTable
复制到它?
INSERT INTO [dbo].[NewTable] ([id], [data])
SELECT [id], [image] FROM [dbo].[OldTable]
首先从BOL:
图像:可变长度的二进制数据从0到2^31-1 (2,147,483,647)字节。
图像数据类型本质上是varbinary(2GB)的别名,因此将其转换为varbinary(max)不应导致数据丢失。
但可以肯定的:
我建议你使用'varbinary(max)';)。 –
'max(DATALENGTH(data))'很好'小于50' – Praveen
检查[此问题](http://stackoverflow.com/questions/444072/varbinary-vs-image-sql-server-data-type- to-store-binary-data);)。 –