2013-02-04 36 views
1

我想按下图所示的文章标题按文章标题对网格视图进行排序。 我将我的网格视图连接到dataSqlsouce。 但它给了我这个错误: 将nvarchar值“XX”转换为数据类型int时转换失败。 enter image description here在排序时将nvarchar值“XX”转换为数据类型int时转换失败

我在datasqlsource的Sql鳕鱼是:

SELECT addtitle.title, 
     submitmanuscript.status, 
     addarticletype.type, 
     addarticletype.username       AS Expr1, 
     addarticletype.articletype, 
     submitmanuscript.date, 
     submitmanuscript.articlenum, 
     addarticletype.articleid, 
     CONVERT (VARCHAR(10), submitmanuscript.date, 103) AS date1, 
     addarticletype.checkfinish, 
     rolinfo.* 
FROM addarticletype 
     INNER JOIN addtitle 
       ON addarticletype.articleid = addtitle.articleid 
     INNER JOIN submitmanuscript 
       ON addarticletype.articleid = submitmanuscript.articleid 
     INNER JOIN rolinfo 
       ON addarticletype.username = rolinfo.username 
WHERE (addarticletype.articleid IN (SELECT articleid 
             FROM addupload_4 AS AddUpload_4_1 
             WHERE 
     (addarticletype.checkfinish = '0'))) 
     AND (addarticletype.type = @Type) 
ORDER BY CASE 
      WHEN @order = 'AddArticleType.ArticleID' THEN addarticletype.articleid 
      WHEN @order = 'Title' THEN CONVERT(VARCHAR, title) 
      WHEN @order = 'family' THEN family 
      WHEN @order = 'AddArticleType.ArticleType' THEN 
      addarticletype.articletype 
      END 

任何机构可以帮助我吗?

+0

我使用CONVERT(VARCHAR,Title)使它成为nvarchar! – Reza

+1

任何解决方案? – Reza

+0

谢谢,你有什么建议? – Reza

回答

2

我认为这个问题是在你的ORDER BY CASE语句 - 你试图通过整数和/或nvarchars进行排序,也不会允许为:

看到这个小提琴:

http://sqlfiddle.com/#!3/db37b/1

您可以将所有所以解决这个RT价值为nvarchar,虽然@Gordons答案似乎更为合适:

ORDER BY CASE 
     WHEN @order = 'AddArticleType.ArticleID' THEN CONVERT(nvarchar,addarticletype.articleid) 
     WHEN @order = 'Title' THEN CONVERT(nvarchar, title) 
     WHEN @order = 'family' THEN CONVERT(nvarchar, family) 
     WHEN @order = 'AddArticleType.ArticleType' THEN 
     CONVERT(nvarchar, addarticletype.articletype) 
     END 

你可能只需要使用的条款ArticleID场转换,但我继续把它所有的字段,因为我不知道他们的数据类型。

祝你好运。

1

A case声明必须选择一种类型才能返回。第一个then是导致问题的一个数字。

就分裂成条款单独case声明:

ORDER BY (CASE WHEN @order = 'AddArticleType.ArticleID' THEN AddArticleType.ArticleID end), 
     (case WHEN @order = 'Title' then CONVERT(VARCHAR,Title) end), 
     (case WHEN @order = 'family' THEN family end), 
     (case WHEN @order = 'AddArticleType.ArticleType' THEN AddArticleType.ArticleType END) 
+0

谢谢你,但它给了我一个错误的订单.. – Reza

+0

我认为这里的问题是在顺序中的逗号 - 添加“ELSE 0”或一些仲裁值的每个CASE语句,它应该工作.. – sgeddes

+0

你有什么错误?您应该可以在'order by'中使用多个表达式。 “其他”条款的缺乏并不重要,它应该只是默认为NULL。 –

相关问题