2015-07-21 100 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. 成功測試後,放棄舊列