2015-01-19 2 views
2

이 문제의 해결 방법은 herehere으로 처리되었지만 실제로 텍스트 데이터 형식에 COUNT()를 사용할 수없는 이유는 무엇입니까? 기술적 인 제한 사항입니까? 누군가 내부 메커니즘이 이것을 주도한다는 것을 알고 있습니까?텍스트에 COUNT() 메서드를 사용할 수없는 이유는 무엇입니까?

+6

왜 이치에 맞지 않습니까? 비 MS SQL Server 사용자로서 나는 왜 볼 수 없습니까? 집계 함수 COUNT는 모든 데이터 유형에서 작동해야합니다. 열의 값이 null가 아닌 경우는 계산되고, null의 경우는 계산되지 않습니다. – jarlh

+0

예를 들어 varchars에서 수행 할 수있는 텍스트에는 할 수없는 많은 작업이 있습니다. 이것이 데이터 형식이 더 이상 사용되지 않는 이유이기도합니다. 텍스트를 사용해야하는 경우 @a_horse_with_no_name에 의해 제안 된 것을 수행해야합니다. 그러나 특정 구현 제한 그러나 나는 모른다. –

+0

네, 언급 한 jarlh와 정확히 똑같은 해결책을 알고 있습니다. 그러나 여전히 어떤 데이터 유형에도 의지 할 수없는 이유는 무엇입니까? – frost

답변

1

이 실제 질문에 대답하려면 : 합계() 함수는 외부 효과적으로 수를 반환 수많은 기술적 인 제한 사항 (예 : 직접 업데이트를 사용할 수없는 경우)

Microsoft는 SQL Server 2005의 릴리스에서이 문제를 해결하지만, 이전 버전과의 호환성을 유지하기 위해, 세 새로운 데이터 유형으로 그렇게 : VARCHAR (MAX), NVARCHAR (MAX) 및 VARBINARY (MAX). 대신에 이러한 데이터 유형을 사용하는 것으로 전환해야합니다.이 데이터 유형은 거의 모든면에서 개선되었습니다.

1

이미 해결책을 찾은 것 같지만 답변을 검색하는 다른 사용자에게는 이것이 효과적입니다. case 문은 Null이 아니거나 빈 문자열이있는 각 행에 대해 1을 반환하고 비어있는 각 행에 대해 0을 반환하거나 Null을 반환합니다. 문자 및 숫자 필드에서 작동합니다. 가지고 고리 타/사용되지 않는 데이터 유형이, TEXT, NTEXT 및 IMAGE :

오래된 대형/LOB 데이터 유형 :

select sum(
    case when YourField >'' then 1 
    else 0 
    end 
) 'mycount' 
from YourTable 
관련 문제