我有一個表,如:轉換表列數據類型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);)。 –