将 table 列数据类型从 image 转换为 varbinary
Convert table column data type from image to varbinary
我有一个 table 喜欢:
create table tbl (
id int,
data image
)
发现data
列非常小,可以存储在varbinary(200)
中
所以新的 table 会是,
create table tbl (
id int,
data varbinary(200)
)
我如何才能将此 table 迁移到新设计 而不会丢失其中的数据。
您可以使用此 ALTER 语句将现有列 IMAGE
转换为 VARBINARY(MAX)
。 Refer Here
ALTER Table tbl ALTER COLUMN DATA VARBINARY(MAX)
完成此转换后,您肯定会恢复数据。
注意:- 不要忘记在执行前进行备份。
IMAGE 数据类型已在未来版本 SQL SERVER 中弃用,需要尽可能转换为 VARBINARY(MAX)。
只需做两个单独的 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
用 varbinary
创建一个 NewTable
,然后将 OldTable
中的数据复制到其中如何?
INSERT INTO [dbo].[NewTable] ([id], [data])
SELECT [id], [image] FROM [dbo].[OldTable]
首先来自BOL:
image: Variable-length binary data from 0 through 2^31-1
(2,147,483,647) bytes.
图像数据类型本质上是 varbinary (2GB) 的别名,因此将其转换为 varbinary(max) 应该不会导致数据丢失。
但可以肯定的是:
- 备份现有数据
- 添加一个新字段 (varbinary(max))
- 将数据从旧字段复制到新字段
- 将字段与 sp_rename
交换
- 测试
- 测试成功后,删除旧列
我有一个 table 喜欢:
create table tbl (
id int,
data image
)
发现data
列非常小,可以存储在varbinary(200)
所以新的 table 会是,
create table tbl (
id int,
data varbinary(200)
)
我如何才能将此 table 迁移到新设计 而不会丢失其中的数据。
您可以使用此 ALTER 语句将现有列 IMAGE
转换为 VARBINARY(MAX)
。 Refer Here
ALTER Table tbl ALTER COLUMN DATA VARBINARY(MAX)
完成此转换后,您肯定会恢复数据。
注意:- 不要忘记在执行前进行备份。
IMAGE 数据类型已在未来版本 SQL SERVER 中弃用,需要尽可能转换为 VARBINARY(MAX)。
只需做两个单独的 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
用 varbinary
创建一个 NewTable
,然后将 OldTable
中的数据复制到其中如何?
INSERT INTO [dbo].[NewTable] ([id], [data])
SELECT [id], [image] FROM [dbo].[OldTable]
首先来自BOL:
image: Variable-length binary data from 0 through 2^31-1 (2,147,483,647) bytes.
图像数据类型本质上是 varbinary (2GB) 的别名,因此将其转换为 varbinary(max) 应该不会导致数据丢失。
但可以肯定的是:
- 备份现有数据
- 添加一个新字段 (varbinary(max))
- 将数据从旧字段复制到新字段
- 将字段与 sp_rename 交换
- 测试
- 测试成功后,删除旧列