2017-10-18 48 views
0

我在我的本地計算機上的表跑sp_columns SomeTable,並被輸出爲一列,應該是一個varbinary(max)列困惑:爲什麼sp_columns顯示'image'作爲varbinary(max)類型的type_name?

TABLE_QUALIFIER TABLE_OWNER TABLE_NAME COLUMN_NAME DATA_TYPE TYPE_NAME PRECISION 
-------------------------------------------------------------------------------------- 
MDB    dbo   SomeTable  SomeColumn -4  image  2147483647 

混亂的部分是,這列是VARBINARY(max)列,但這裏列出的TYPE_NAMEimage

所以我的問題是這樣的:爲什麼sp_columns這是image當它是varbinary(max)

這是Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64)

+0

由於'sp_columns'追溯到到SQL Server 6.0([參考](https://msdn.microsoft.com/en-us/library/aa226174 %28v = sql.70%29.aspx?f = 255&MSPPError = -2147217396)。)它可能從Ye Good Olde Days那裏帶走一些行李。而不是改變返回的結果和打破現有的代碼,它只是繼續返回一個現在不贊成使用的類型。 _他們有很多其他方式來打破現有的代碼。 – HABO

回答

0

我能重現此。我猜是因爲IMAGE被定義爲

Variable-length binary data from 0 through 2^31-1 

這是一樣的VARBINARY(MAX)

更改MAX爲任何其他值改變從圖像VARBINARY

+0

我想這是有道理的。這只是bizzare,因爲在tsql的最新版本中image是一個不推薦使用的類型。 –

0

我總是喜歡使用sys目錄視圖來檢查這種事情對我的數據庫對象 - 在這裏,我得到varbinary作爲類型名稱和-1作爲max_length(表示varbinary(max)):

SELECT 
    TableName = t.Name, 
    ColumnName = c.Name, 
    TypeName = ty.Name, 
    c.max_length 
FROM sys.tables t 
INNER JOIN sys.columns c ON c.object_id = t.object_id 
INNER JOIN sys.types ty ON ty.system_type_id = c.system_type_id 
WHERE t.name = 'SomeTable' 
    AND c.name = 'SomeColumn' 
相關問題