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

問題はORDERBYCASEステートメントにあると思います-intや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ステートメントは、返すタイプを1つ選択する必要があります。1つ目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 に答える