【问题标题】:Distinct error with image field图像字段的明显错误
【发布时间】:2014-06-27 13:59:07
【问题描述】:

我有一个包含图像列的表。现在我想选择图像列的不同值,但它给出了错误。列名也是Image。

我的查询是:从 tbl1 中选择图片

错误是:图像数据类型无法选择为 DISTINCT,因为它不可比较。

那么如何从 tb1 表中选择不同的值

【问题讨论】:

  • 简短的回答是你不能。为什么您的数据库中有多个图像数据副本?
  • 这在任何意义上都太糟糕了......为什么你会想要这种查询?确实有可能,但你迟早会放弃这个查询,它会非常慢......原因很明显

标签: sql-server-2012


【解决方案1】:

包含 DISTINCT 子句的 SELECT 语句中的图像数据类型。根据所使用的 SQL Server 版本,有几种方法可以克服此限制。

对于 SQL Server 2000,TEXT 列可以转换为 VARCHAR 数据类型,NTEXT 列可以转换为 NVARCHAR 数据类型,而 IMAGE 数据类型可以转换为 VARBINARY 数据类型。前面包含 DISTINCT 子句的 SELECT 语句可以改写如下,避免报错:

SELECT DISTINCT [BookTitle], CAST([BookSummary] AS NVARCHAR(4000)) AS [BookSummary] FROM [dbo].[书]

SELECT DISTINCT [BookTitle], CAST([BookImage] AS VARBINARY(8000)) AS [BookImage] 来自 [dbo].[书] 对于 SQL Server 2005 和 SQL Server 2008(及更高版本),可以使用 MAX 说明符代替其位置,而不是将 NVARCHAR 限制为 4000 个字符或将 VARCHAR 或 VARBINARY 限制为 8000 个字符,如以下 SELECT 语句所示:

SELECT DISTINCT [BookTitle], CAST([BookSummary] AS NVARCHAR(MAX)) AS [BookSummary] FROM [dbo].[书]

选择 DISTINCT [BookTitle],CAST([BookImage] AS VARBINARY(MAX)) AS [BookImage] 来自 [dbo].[书] 如果使用 SQL Server 2005 或 SQL Server 2008(或更高版本),另一种克服此限制和此错误消息的方法,无需使用 CAST 或 CONVERT 函数将 text、ntext 和 image 数据类型分别转换为 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

【讨论】:

  • 一个人可以做一件事,并不意味着一个人就应该做那件事。
猜你喜欢
  • 2018-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-24
  • 1970-01-01
  • 1970-01-01
  • 2015-11-16
  • 1970-01-01
相关资源
最近更新 更多