2017-10-18 8 views
0

は、私は自分のローカルコンピュータ上のテーブルの上にsp_columns SomeTableを走り、varbinary(max)列でなければなりません列の出力で混乱していた:なぜsp_columnsはvarbinary(max)型のtype_nameとして 'image'を表示しますか?

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

紛らわしい部分は、この列は、varbinary型(最大)の列があるということですここに記載されているTYPE_NAMEimageです。

私の質問はこれです:なぜsp_columnsvarbinary(max)のときimageと記載されていますか?

これは私がこれを再現することができました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 Goode Daysからいくつかの荷物を運びます。返される結果を変更したり、既存のコードを破るよりも、現在は非推奨の型を返すだけです。 _これらは、既存のコードを破る他の多くの方法があります。 – HABO

答えて

0

です。 IMAGEVARBINARY(MAX)と同じである

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

として定義されているので、私は推測しています。他の値にMAXを変更

私はいつも私のDBオブジェクトに関する物事のこれらの種類を検査するsysカタログビューを使用することを好むイメージからVARBINARY

+0

私はそれが理にかなっていると思います。イメージはtsqlの最新バージョンで廃止されたタイプなので、それはちょっとしたことです。 –

0

にそれを変更 - と、ここで、私はタイプとしてvarbinaryを得ますかmax_length(意味varbinary(max))として名前、および-1

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' 
関連する問題