2013-04-08 2 views
4

간단한 INSERT 명령에, 나는 오류를 얻고있다.T-SQL - - 오류 데이터 형식을 변환 쇼 잘못된 행

내 성명을 다시 작성하여 오류를 포착하고 문제가되는 데이터를 표시 할 수 있습니까?

감사합니다.

편집 : 코드에 대한

요청 :

다음은이 문제를 처리 할 때 내가 찍은 두 가지 방법이 있습니다
insert Table_A 
    ([ID] 
    ,[rowVersion] 
    ,[PluginId] 
    ,[rawdataId] 
    ... 
    ... 
    ... 
    ) 
select [ID] 
     ,[rowVersion] 
     ,[PluginId] 
     ,[rawdataId] 
     ... 
     ... 
     ... 
FROM TABLE_B 
+3

우리가 귀하의 질의를 볼 수 있다면 도움이 될 것입니다. –

+0

그리고 ... 쿼리는 어디에 있습니까? – valex

+0

@Warren 우리의 코드를 보여주십시오 – Alex

답변

6

. 이 문제는 문자열에서 날짜로의 암시 적 변환으로 인해 발생합니다. 당신이 (항상은 아니지만 내에서, 당신의 예에 해당 할 수있는) 변환되고있는 필드 알고 일어날 경우

, 그럼 그냥 수행

select * 
from table_B 
where isdate(col) = 0 and col is not null 

이 모든 데이터 유형에 적합하지 않을 수 있습니다 ,하지만 그것은 실제로 잘 작동했습니다.

가끔 문에서 문제가되는 행을 찾으려면 select을 실행하여 데이터를 그리드가 아닌 텍스트로 출력해야합니다. 이것은 메뉴 아래의 아이콘 행을 따라 SSMS의 옵션 중 하나입니다. 오류가 발생하기 전에 모든 행을 출력합니다. 어떤 종류의 오류로 오류가있는 행을 식별 할 수 있습니다. 이것은 order by 절이있을 때 가장 잘 작동하지만 디버깅 목적으로는 저에게 효과적입니다.

경우에 따라 문자열을 포함하는 임시 테이블을 만든 다음이 임시 테이블에 대한 분석을 수행 할 수 있습니다. 특히 Table_B가 실제로 테이블이 아닌 복잡한 쿼리 인 경우 특히 그렇습니다.

1

쿼리 문 insert into...select 또는 select ... into ... from에는 문제가되는 데이터를 찾을 수 없습니다. 대신 BCP을 사용하여 max_erroserr_files을 설정하여 문제가되는 모든 데이터를 오류 파일로 출력 할 수 있습니다. 그런 다음 오류 파일을 분석하여 문제가되는 모든 행을 찾을 수 있습니다.
[BCP는 MSDN]1

1

한가지 해결책은 문제의 값 (들)을 찾는 binary search 할 것이다. 당신은 열을 기준으로하고 행에 의해 그 모두 수행 할 수 있습니다 그 열의 나머지 절반을 작동하는 경우

  • 시도는 절반 밖에 열을 삽입 할 수 있습니다.

  • 행 수의 절반 만 삽입하십시오. 그게 나머지 반쪽 일하면.

그리고 문제가 발견 될 때까지 반복하십시오.