1

我想按文章标题对我的网格视图进行排序,下拉列表如下图所示。我将我的网格视图连接到 dataSqlsouce。但它给了我这个错误:将 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 

有谁能够帮我?

4

2 回答 2

2

我认为问题出在您的 ORDER BY CASE 语句中-您正在尝试按整数和/或 nvarchars 进行排序,但它不允许这样做:

看到这个小提琴:

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

您可以通过将所有排序值转换为 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 字段上使用 CONVERT,但我继续将它放在所有字段上,因为我不知道它们的数据类型。

祝你好运。

于 2013-02-04T15:13:44.173 回答
1

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)
于 2013-02-04T15:13:31.677 回答