2014-12-02 2 views
0

연결된 서버로 연결된 cobol 데이터베이스에서 SQL Server로 데이터를 가져옵니다. 테이블 중 하나에서 불량 데이터가 발생하여 문제의 레코드를 추적하려고합니다. 특히 우리는 1 년 필드에 입력 된 편지를 가지고 있는데, SQL이 데이터를 가져 와서 해당 열을 숫자 데이터 유형으로 변환하려고 시도 할 때.연결된 테이블의 데이터가 잘못되었습니다.

나는 openarchery와 cast를 조합하여 최소한 특정 열을 varchar로 선택하여 특정 위반 레코드를 검색하고 해당 부서를 가질 수 있다고 생각합니다. 오류를 수정하십시오.

다음 두 구문을 시도했지만 모두 오류가 발생합니다. 이와

linked server name = incode 
    table name = CTVEHL 
    Specific offending column = VEH_YEAR 

지원 명확성을 위해

select * from [incode]...ctvehl 
where VEH_YEAR like '992D' 

select * from openquery (incode, 'select cast(* as nvarchar) from ctvehl') 

은 크게 감상 할 수있다.

감사

답변

0

당신은 처음에 모든 varchar() 열이 SQL Server 내 작업 테이블에 데이터를 삽입 할 수있다. 그런 다음 가능한 오류에 대해 작업 테이블의 유효성을 검사하고 구문 분석 한 다음 잘못된 행을 다른 처리 /보고를위한 "오류"테이블로 이동시킵니다. 그런 다음 나머지 행을 실제 테이블에 삽입하십시오.

당신은 SQL Server 통합 서비스로 보일 것입니다, 그것은 대량 데이터를 가져올 수있는 방법을 제공하며, 나쁜 행을 처리, 참조 : SQL Server Integration Services Dealing with Bad Data

+0

을 문에 select를 사용하고 계십니까? –

+0

나는 'INSERT INTO local_WorkTable (col1, col2, col3) SELECT col1, col2, col3 from openquery (incode,'select col1, col2, col3 from ctvehl ')와 같은 것을 쓸 것이다. 그러나 INSERT INTO local_RealTable (col1, col2, col3)을 사용하여 WorkTable을 건너 뛸 수도 있습니다. SELECT col1, col2, cast (col3 as varchar (23)) openquery (incode, 'select col1, col2, col3 from 에서 ctvehl ')'. Openquery는'cast'를 처리 할 수없는 것 같은 Cobol 시스템에 쿼리를 전달합니다. 그러면'cast'가 SQL 서버에서 로컬로 실행됩니다. 이 코드 확인 –

+0

'만들기 테이블 local_tempTable ( VEH_VEHICLE_CODE의 INT, VEH_YEAR의 VARCHAR (23) ) INSERT INTO local_TempTable (VEH_VEHICLE_CODE, VEH_YEAR) SELECT VEH_VEHICLE_CODE, 주조 (VEH_YEAR VARCHAR (23)와 같은) OPENQUERY FROM (INCODE ' 'TOD] [ODBC] [GENESIS] VISION : VEH_YEAR 문자열'992D '를 (를)'992D '로 변환하는 동안 오류가 발생했습니다. 숫자 ". 메시지 7330, 수준 16, 상태 2, 줄 6 OLE DB 공급자 "MSDASQL"에서 "incode"링크 된 서버의 행을 가져올 수 없습니다. –