无法比较text,ntext和image数据类型RowNumber

时间:2018-10-03 09:19:35

标签: sql sql-server-2008

我知道这个问题已经解决了很多次,但是经过几十个论坛之后,我找不到我的错误...

我正在使用2008 SQL Server 这是我的查询:

Declare @order varchar(MAX) = 'DESC'
Declare @sort varchar(MAX) = 'Description'

SELECT TOP 10 * from ( SELECT *, ROW_NUMBER() OVER 
(ORDER BY 
(CASE WHEN @sort = 'Name' and @order = 'ASC' THEN NAME 
      WHEN @sort = 'URL' and @order = 'ASC' THEN URL
      WHEN @sort = 'Description' and @order = 'ASC' THEN Description       
      END) ASC, 
(CASE WHEN @sort = 'Name' and @order = 'DESC' THEN NAME
      WHEN @sort = 'URL' and @order = 'DESC' THEN URL
      WHEN @sort = 'Description' and @order = 'DESC' THEN Description
      END) DESC) 
AS RowNum FROM Application) AS MyDerivedTable WHERE MyDerivedTable.RowNum BETWEEN 0 AND 10

错误:

  

” text,ntext和image数据类型无法比较或排序,   除非使用IS NULL或LIKE运算符”

我也尝试用nvarchar替换varchar,但是它不起作用。

感谢帮助

2 个答案:

答案 0 :(得分:0)

case表达式返回单个类型。我建议您使用单独的表达式重写order by

ORDER BY (CASE WHEN @sort = 'Name' and @order = 'ASC' THEN NAME END) ASC,
         (CASE WHEN @sort = 'URL' and @order = 'ASC' THEN URL END) ASC,
         (CASE WHEN @sort = 'Description' and @order = 'ASC' THEN Description END) ASC, 
         (CASE WHEN @sort = 'Name' and @order = 'DESC' THEN NAME END) DESC,
         (CASE WHEN @sort = 'URL' and @order = 'DESC' THEN URL END) DESC,
         (CASE WHEN @sort = 'Description' and @order = 'DESC' THEN Description END) DESC

我不确定这是否可以解决您的特定问题,这似乎是由于某些列使用了奥术类型。但是,这可以解决由于混合类型使用单个case表达式而引起的大多数问题。

大概您正在使用text列。此类型已被弃用,因此您不应使用它。我强烈建议您将类型更改为varchar(max)nvarchar(max)

答案 1 :(得分:0)

已解决!我在表定义中有一个“ URL”作为“文本”类型,我将其替换为nvarchar。谢谢