2013-02-04 2 views
1

아래 그림과 같이 드롭 다운 목록이있는 기사 제목으로 그리드보기를 정렬하려고합니다. 그리드 뷰를 dataSqlsouce에 연결합니다. 하지만이 오류가 발생했습니다 : nvarchar 값 "XX"를 int 유형의 데이터로 변환 할 때 변환에 실패했습니다. datasqlsource에서 enter image description here정렬 중에 nvarchar 값 "XX"를 데이터 유형 int로 변환 할 때 변환이 실패했습니다.

내는 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

나는 문제가 CASE 문하여 주문에 생각 - 당신의 int 및/또는 nvarchars으로 정렬하려는 그것은하지 않습니다 그 허용 :

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

당신은 모든 너무 변환하여이 문제를 해결할 수 있습니다

이 바이올린을 참조하십시오 @Gordons의 대답이 더 적절한 것 같다 있지만 RT 값은 NVARCHAR합니다 :

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를 사용해야하지만 내가 나서서 내가 알고하지 않았기 때문에 모든 필드에 넣어 그들의 데이터 유형.

행운을 빈다.

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) 
+0

고마워요.하지만 저에게 주문에 관한 오류를주었습니다. – Reza

+0

여기 문제는 순서대로 쉼표로 생각됩니다 - "ELSE 0"또는 각각의 CASE 문에 중재 값을 추가하면 작동합니다. – sgeddes

+0

어떤 오류가 발생 했습니까? '주문순'에 여러 개의 표현식을 사용할 수 있어야합니다. else 절의 부족은 중요하지 않습니다. 그냥 NULL로 기본 설정해야합니다. –

관련 문제