0

데이터베이스에서 결과를 가져 오기 위해이 쿼리를 사용하고 있습니다. 내 문제는 selectedanswer 부분의 select 문이 모든 데이터를 r.textboxmulti에서 가져 오지 않는다는 것입니다.Select 문이 필드의 모든 데이터를 가져 오지 않음 - SQL Server 2008 R2

다음은 내 검색어입니다.

 <cfquery name="fullResults" datasource="#variables.dsn#"> 
    select s.id, s.name surveyname, q.question, subq.answer subquestion, isnull(isnull(isnull(isnull(a.answer, **r.textboxmulti**),r.other),r.textbox),r.truefalse) as **selectedanswer**, a.*, r.* 
    from results r 
    join questions q on r.questionidfk = q.id 
    left join answers subq on r.itemidfk = subq.id 
    left join answers a on r.answeridfk = a.id 
    join surveys s on q.surveyidfk = s.id 
    where owneridfk = <cfqueryparam value="#arguments.ownerid#" cfsqltype="CF_SQL_VARCHAR" maxlength="35"> 
    order by s.id, owneridfk, q.rank, subq.rank desc 
    </cfquery 
+0

'textboxmulti '의 데이터 유형은 무엇입니까? '텍스트'인 경우 더 이상 사용되지 않는 데이터 유형으로 변경하는 것을 고려하십시오 (예 :> 8K가 필요한 경우 'varchar (max)'). –

+0

데이터 유형이 여기에서 문제가되지 않습니다. 왜냐하면 SELECT textboxmulti FROM 결과와 같은 것을 실행하면 모든 결과를 다시 얻을 수 있기 때문입니다. – Geo

+0

그런 다음 "모든 데이터를 가져 오지 않는"의미를 더 잘 설명 할 수 있습니까? 어떤 점에서 255, 4000, 8000자를 잘라내는 것입니까? Cold Fusion 이외의 다른 곳에서 쿼리를 실행하면 어떻게됩니까? –

답변

1

"모든 데이터"가 의미하는 바를 설명해 주시겠습니까? 일부 행에 대해 r.textboxmulti에서 데이터를 가져 오지 않는다는 것을 의미하는 경우 해당 행에 대해 null이고 그 사실이 포장 된 isnull에 의해 가려진다는 것을 의미합니다 (덧붙여 말하자면 병합 사용을 고려할 수 있습니다 중첩 대신 isnull ....)

데이터를 가져오고 있지만 일부만 남겨 두려는 경우 하나의 가능성은 잘려나 간다는 것입니다. SQL Server (또는 사용자가 처리중인 다음 단계)가 반환 값을 보유하기에는 너무 작은 데이터 형식으로 간주되는 경우이 문제가 발생할 수 있습니다. 이는 암시 적 형식 변환으로 인해 때때로 발생할 수 있습니다. 충분히 큰 데이터 유형으로 명시 적으로 변환하여 처리 할 수 ​​있습니다.

드문 경우지만 r.textboxmulti에는 ASCII null 문자가 포함될 수 있습니다. 많은 프로그램 (SQL Server 인쇄 명령을 포함하여 ...)은 그 문자열에서 아무 것도 표시하지 않으려면 명령으로 사용합니다. 이것은 자주 나오지는 않지만 나는 스스로 그것을 겪었다.

+0

일부 데이터가 출력되고 나머지는 잘립니다. 두 번째 옵션이 내 문제라고 생각합니다. – Geo

+0

그건 의미가 있습니다. isnull이 입력 된 첫 번째 값의 데이터 유형을 반환하려고한다는 것을 기억하십시오. 따라서 a.answer가 varchar (10)이고 r.textboxmulti가 varchar (20)이면 문제가 발생할 수 있으며 강제 캐스팅이 도움이 될 수 있습니다. – TimothyAWiseman

+0

내가 조사 할 것이다. 감사! – Geo

2

ISNULL 대신 COALESCE을 사용해보세요. 이로 인해 다른 데이터 유형 선행 규칙이 생깁니다. a.answervarchar(255)입니다. 또한 명시 적으로 첫 번째 인수를 변환 할 다치게 할 수 없어 : SQL Server 관리 Studio에서

COALESCE(CONVERT(VARCHAR(MAX), a.answer), 
    r.textboxmulti, r.other, r.textbox, r.truefalse) 
+0

나는이 문제를 해결했다고 생각합니다. 모든 부분이 나에게 오류를주고 있었기 때문에 나는 변환 부분만을 사용했다. – Geo

+0

Coalesce는 두 개 이상의 인수를 제외하고는 다음에 병합 할 필요가 없다. – TimothyAWiseman

+0

@TimothyAWiseman 예, 매우 사실입니다. 편집 됨. –

0

는 그리드의 컬럼에 대해 표시하거나 텍스트보기에 얼마나 많은 문자를 지시하는 설정이 있습니다.

응용 프로그램에서 데이터를 사용하려는 경우; 거기에 모든 데이터가 있습니까? SSMS의 기본 설정을 사용하여 255 자만 표시하는 확실한 신호입니다.