我知道这个问题已经解决了很多次,但是经过几十个论坛之后,我找不到我的错误...
我正在使用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,但是它不起作用。
感谢帮助
答案 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。谢谢