2011-10-17 2 views
2

오류 메시지를 저장하는 데이터베이스 테이블이 있으며 다양한 쿼리를 실행하고 싶습니다. 첫째,이처럼 그룹화하여 전체 수를 얻을 :WHERE 절이 특정 문자열 리터럴과 함께 실패합니다.

select MessageText, COUNT(*) from MessageLog group by MessageText 

을 그리고 그 결과는 다음과 같습니다

1 Input string was not in a correct format  4 
2 Value cannot be null. Parameter name: Int  8 
3 Value cannot be null. Parameter name: String 1 

자, 내가, 그들 중 일부는 반환 텍스트 문자열로 메시지를 선택하려고하면 없음 메시지가 존재하더라도 결과. 예를 들어,

select * from MessageLog where MessageText = 'Value cannot be null. Parameter name: Int' 

이전 쿼리에 8 개가 있지만 결과가 반환되지 않습니다. 이 문자열에 대해 일치하지 않는 것은 무엇입니까?

+1

는 여분의 공백에이 있다고 할 수/당신 보낼 메세지 후를 들어 당신이 할 수있는 테스트 검증? –

+0

SQL Server 용입니까? –

+0

어느 RDBMS입니까? 어떤 버전입니까? –

답변

2

내 추측으로는 MessageText에 계산되지 않은 공백이 있거나 우리에게 표시되지 않는 것을 수행하고있는 것 같습니다. 다음 쿼리를 실행했습니다 :

with MessageLog as 
(
    select 1 as id, 'Input string was not in a correct format' as MessageText, 4 as count 
    UNION 
    select 2 as id, 'Value cannot be null. Parameter name: Int' , 8 
    UNION 
    select 3 as id, 'Value cannot be null. Parameter name: String' , 1 
) 
select * from MessageLog where MessageText = 'Value cannot be null. Parameter name: Int' 

그리고 예상되는 결과를 얻었습니다.

+0

많은 사람들이 문제의 주요 요점에 부딪힌 것처럼 보입니다. 그러나 동일한 쿼리로 인해이 대답을 선택했습니다. Microsoft SQL Server Management Studio에서 내 쿼리를 실행하고 있고 첫 번째 쿼리의 결과에서 두 번째 쿼리의 명령으로 직접 텍스트를 복사했습니다. 내가 알지 못했던 것은 출력이 원래 개행 문자였던 것을 공백으로 대체했다는 것입니다. 내 쿼리를 Excel 스프레드 시트에 붙여 넣으면 새 텍스트가있는 원본 텍스트가 표시됩니다. 공백 대신 줄 바꿈 문자를 추가하면 쿼리가 예상대로 작동합니다. 감사 ! –

1

실제 메시지에 두 번째 쿼리에서 고려하지 않은 공백이있을 수 있습니다.

0

해당 쿼리의 출력을 텍스트 파일로 리디렉션 한 다음 od -c을 통해 확인하십시오. 거기에 숨겨진 인물이있을 수 있습니다.

1

가장 좋은 추측은 후행 공백이거나 텍스트 문자열 안에 여분의 공백이있는 공백 문제입니다. 그들을 비교하기 전에 필드에 트림을 사용해보십시오.

1

어쩌면 문자열 끝에 공백이있을 수 있습니다.

select * from MessageLog where MessageText LIKE 'Value cannot be null. Parameter name: Int%' 

또는 :

select * from MessageLog where TRIM(MessageText) = 'Value cannot be null. Parameter name: Int' 
관련 문제