일부 데이터를 통합하기 위해 동적으로 작성된 큰 뚱뚱한 쿼리가 있습니다. 기본적으로 테이블을 쿼리하고, 다른 테이블을 조인하고, 일부 데이터를 처리 한 다음 최종 테이블에 삽입합니다.어떤 행에서 오류가 발생했는지 확인하십시오.
문제는 너무 많은 데이터가 있고 오류가 있거나 일치하지 않는 데이터가있을 수 있으므로 원본을 신뢰할 수 없다는 것입니다.
예를 들어, 고객의 데이터베이스를 사용하여 개발하는 동안 오류를 찾는 데 많은 시간을 보냈습니다. 내 큰 뚱뚱한 쿼리 중간에 일부 varchar를 datetime으로 변환하는 중 오류가 발생했기 때문입니다. 범위를 벗어난 날짜 인 '2009-02-29'로 판매되는 판매가 있었다는 것이 밝혀졌습니다. 예, 알고 있습니다. 왜 그것이 varchar로 저장 되었습니까? 음, 소스 데이터베이스에는 날짜, '월', '일'및 '연도'에 대한 3 개의 열이 있습니다. 왜 그런지 모르지만 여전히 그렇습니다.
하지만 원본을 신뢰할 수 없다면 어떻게 처리할까요?
나는 예외를 처리 할 수 없다. 원래 메시지와 다른 레벨까지 올 필요가 있지만 좀 더 많은 정보를 제공하여 사용자가 적어도 우리에게 전화하기 전에 해결할 수 있도록해야한다.
그래서 사용자에게 행 번호 또는 적어도 수정해야 할 레코드가 무엇인지에 대한 아이디어를 줄 수있는 ID를 표시하는 방법에 대해 생각했습니다. 통합이 최대 80000 건까지 실행되는시기가 있기 때문에 또한 어려운 일입니다. 그리고 80000 레코드 통합에서 단일 더미 오류 메시지 : 'varchar 데이터 형식을 datetime 데이터 형식으로 변환하면 범위를 벗어나는 datetime 값이 발생 함'은 전혀 의미가 없습니다.
어떤 아이디어라도 감사 할 것입니다.
오 나는 서비스 팩 SQL 서버 2005을 사용하고 있습니다 3.
편집 :이 답변으로 읽은 것을 위해, 할 수있는 가장 좋은 검사가 그래서,
확인 각 열은 오류를 제기하는 데 중요한 역할을 할 수 있으며, 조건에 참석하는 경우 직접 설명해야하는 오류 메시지를 표시하고 별도의 테이블이나 변수에 저장할 수있는 정보를 추가해야합니다. 예 : 행 ID 또는 다른 루트 정보. 날짜
오류 메시지로 내 프로그램에 문자열을 다시 제공 할 수 있습니다. 하지만 큰 쿼리에서이를 연결하여 오류가있는 레코드에 대한 정보를 제공 할 수 있습니다. 오, 그리고 당신이 지적했듯이, 쿼리가 작동하거나 그렇지 않습니다. 에러를 잡으려고하지 않습니다. 나는 그들을 지적하려고합니다. 그래서 내가 찾은 첫 번째 오류에 대한 실행을 중단하고 사용자에게 책임 기록을 보여줍니다. – Smur