为什么sp_columns显示'image'作为varbinary(max)类型的type_name?
问题描述:
我在我的本地计算机上的表跑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_NAME
是image
。
所以我的问题是这样的:为什么sp_columns
这是image
当它是varbinary(max)
?
这是Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64)
答
我能重现此。我猜是因为IMAGE
被定义为
Variable-length binary data from 0 through 2^31-1
这是一样的VARBINARY(MAX)
。
更改MAX
为任何其他值改变从图像VARBINARY
+0
我想这是有道理的。这只是bizzare,因为在tsql的最新版本中image是一个不推荐使用的类型。 –
答
我总是喜欢使用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'
由于'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