2014-06-27 24 views
0

我有包含图像列的表。现在我想选择不同的图像列值,但它会给出错误。列名也是图像。与图像字段不同的错误

我的查询是:选择图像从TBL1

错误是:图像数据类型不能被选择为DISTINCT,因为它是不可比的。

因此,如何在包含DISTINCT子句的SELECT语句从TB1表中选择不同的值

+0

简短的回答是你不能。为什么你的数据库中有多个图像数据副本? –

+0

这在每种意义上都是很有用的......为什么你会想要这种查询呢?这确实是可能的,但你必须早晚排除这个查询,它会非常缓慢......出于显而易见的原因 – Leo

回答

0

图像数据类型。根据所使用的SQL Server版本的不同,有几种方法可以克服此限制。

对于SQL Server 2000,可以将TEXT列转换为VARCHAR数据类型,可以将NTEXT列转换为NVARCHAR数据类型,同时将IMAGE数据类型转换为VARBINARY数据类型。 SELECT DISTINCT [BookTitle],CAST([BookSummary] AS NVARCHAR(4000))AS [BookSummary] FROM [dbo] FROM DISTINCT子句可以重写为以下形式并避免错误消息:

[图书]

SELECT DISTINCT [BOOKTITLE],CAST([BookImage] AS VARBINARY(8000))AS [BookImage] FROM [DBO]。[图书] 对于SQL Server 2005和SQL Server 2008(及更高版本),而不是将NVARCHAR限制为4000个字符,或者将VARCHAR或VARBINARY限制为8000个字符,则MAX说明符可用于其位置,如以下SELECT语句中所示:

SELECT DISTINCT [BOOKTITLE],CAST([BookSummary] AS NVARCHAR(MAX))AS [BookSummary] FROM [DBO]。[图书]

SELECT DISTINCT [BOOKTITLE],CAST([BookImage] AS VARBINARY( MAX))AS [BookImage] FROM [dbo]。[Book] 如果使用SQL Server 2005或SQL Server 2008(或更高版本),则另一种方法可以在不使用CAST或CONVERT函数进行转换的情况下克服此限制和此错误消息文本,ntext和图像数据类型分别为varchar,nvarchar和varbinary,将列的数据类型更改为VARCHAR(MAX),NVARCHAR(MAX)和VARBINARY(MAX)。 TEXT,NTEXT和IMAGE数据类型将在未来版本的Microsoft SQL Server中删除,应避免使用这些数据类型。

参考: http://www.sql-server-helper.com/error-messages/msg-421.aspx

+0

仅仅因为一个人可以做一件事情,并不意味着一个人应该做那件事。 – STLDeveloper