2015-07-21 232 views
0

我有一个表,如:转换表列数据类型VARBINARY

create table tbl ( 
    id int, 
    data image 
) 

它发现列data具有非常小的尺寸,它可以存储在varbinary(200)

所以新表会,

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

我怎么能这个表迁移到新的设计没有松动ŧ他的数据在里面。

+0

我建议你使用'varbinary(max)';)。 –

+0

'max(DATALENGTH(data))'很好'小于50' – Praveen

+0

检查[此问题](http://stackoverflow.com/questions/444072/varbinary-vs-image-sql-server-data-type- to-store-binary-data);)。 –

回答

2

只是做两个独立的ALTER TABLE S,因为你只能转换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 

结果:

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

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

ALTER Table tbl ALTER COLUMN DATA VARBINARY(MAX) 

这种转换后,您肯定,让您的数据回退。

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

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

1

如何创建一个NewTablevarbinary,然后将数据从OldTable复制到它?

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

首先从BOL:

图像:可变长度的二进制数据从0到2^31-1 (2,147,483,647)字节。

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

但可以肯定的:

  1. 备份现有数据
  2. 添加一个新的领域(VARBINARY(MAX))从旧场
  3. 将数据复制到新的领域
  4. 交换领域用sp_rename
  5. 测试
  6. 成功测试后,放弃旧列