【问题标题】:Convert table column data type from image to varbinary将表列数据类型从 image 转换为 varbinary
【发布时间】:2015-07-21 13:58:32
【问题描述】:

我有一张这样的桌子:

create table tbl ( 
  id int,
  data image
)

发现data这个列很小,可以存放在varbinary(200)

所以新表应该是,

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

如何将此表迁移到新设计而不丢失其中的数据。

【问题讨论】:

  • 我建议你使用varbinary(max) ;)。
  • max(DATALENGTH(data)) 很好less than 50
  • 检查this question ;)。
  • 首先将其更改为varbinary(max)然后将长度更改为单独的步骤。见ALTER TABLE:“textntextimage列的数据类型只能通过以下方式改变... imagevarbinary(max)"
  • 感谢您的链接;但是如何在不丢失表中数据的情况下从image 转换为varbinary(max)

标签: sql sql-server tsql sql-server-2014 alter-table


【解决方案1】:

只需做两个单独的ALTER TABLEs,因为您只能将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

【讨论】:

    【解决方案2】:

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

    ALTER Table tbl ALTER COLUMN DATA VARBINARY(MAX)
    

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

    注意:- 执行前别忘了备份。

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        首先来自 BOL:

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

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

        但可以肯定的是:

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

        【讨论】:

          猜你喜欢
          • 2019-07-15
          • 2013-06-18
          • 2013-10-05
          • 2017-10-30
          • 2015-10-10
          • 1970-01-01
          • 2012-08-28
          • 2016-11-14
          • 2011-08-12
          相关资源
          最近更新 更多