문제

우리는 최근에 타사 제품이 사용하는 오픈 에지 데이터베이스와 함께 일을해야했으며 오늘날 (많은 머리카락을 뚫고 나면) 마침내 뷰가 결과를 반환하는 이유를 확인했습니다. 문제 의이 견해는 약 100 개의 개별 테이블을 결합한 다음 쿼리됩니다 (이 데이터베이스에 대한 제한된 권한이 있습니다). 이보기에 의해 반환 된 필드 중 하나는 라인을 따라 하드 코딩 된 문자열 문자입니다.

'John Smith' AS TheName

우리는이 문자열이 포함 된 쿼리를 실행하는 데 어려움을 겪고 있었는데, 우리는 rtrim (보기가 많은 후행 공간을 반환 한 다음 다른 필드와 연결하려고했습니다. 그러나이 필드에서 rtrim을 사용하면 오류 메시지 또는 널 또는 그와 비슷한 것을 반환하는 대신 행을 반환하지 않았습니다. 우리는 Where 절 또는 가입에서 그것을 사용하려고하지 않았으며, 이것은 단순히 Select ... ViewName의 일부였습니다. 보기를 검토 한 후,보기가 9 자 (정의에 길이가 지정되지 않음)로 문자열의 길이를 잘못 감지 한 것처럼 보였고 RTRIM은 작동하지 않았습니다. 이제 이것이 왜 오류 메시지로 이어질 수 있는지 또는 Select의 널 값으로 이어질 수있는 이유를 이해할 수 있었지만 왜 행이 전혀 반환되지 않습니까?? 이것은 좋은 SQL 동작처럼 보이지 않으며 다른 RDBMS에서 발생하는 것을 본 적이 없습니다.

기타 정보 : ODBC 및 WinSQL을 통해 테스트 쿼리를하고 있으며 기존 ASP.NET 앱에 포함됩니다. 우리는이를 통해서도 백엔드에 액세스 할 수 없습니다. 그러나 우리는보기를 만들 권리가 있습니다.

업데이트 : 이상한 후속 조치로서, 우리는이보기를 Where 조항없이 쿼리하려고하면 레코드가 반환되지 않는다는 것을 발견했습니다. 이것은 같은 원인 일 수 있습니다.

도움이 되었습니까?

해결책

이것은 진행 데이터베이스 내의 SQL 폭과 관련 될 수있는 것처럼 들립니다. 진보의 한 가지 문제는 필드의 내용이 SQL width를 초과하면 이상한 SQL 동작이 발생한다는 것입니다 (때로는 운전자가 실패 할 수 있습니다. 다른 경우에는 결과가 없습니다).

이것을 식별하려면 사용해야합니다 dbtool 명령을 초과 할 수있는 SQL-Width를 확인하십시오.

다른 팁

공란이 없는지 확인하십시오. 트리밍은 공백 만 제거하지 않습니다. 블랭크도 널이 아닙니다. 편집기에서는 눈에 띄지 않지만 문자 세트에는 차이가 있습니다. 몇 가지 데이터베이스 (DBII, Oracle, PostgreSQL)와 함께이 작업을 수행했습니다. 편집기의 캐릭터 세트를 확인하고 테이블을보십시오. 아무것도 보지 못하거나 큰 사각형을 볼 수 있습니다.

그것은 매우 이상한 행동처럼 들립니다. 그 주위에 코딩하고 응용 프로그램에서 트림 및/또는 문자열 조작을 수행하고 길을 계속 진행하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top