2017-01-26 2 views
0

을 사용하면 문자열 또는 이진 데이터가 잘립니다. 일반적으로이 오류는 필드 중 하나가 너무 커서 데이터 길이를 포함 할 수 없음을 의미합니다. 그래서 그것이 내가 시작한 곳입니다. 공백을 검사하기 위해 값의 앞과 뒤의 X를 채웠고 LEN을 사용하여 데이터의 길이를 확인했습니다. 잘못된 것이 없습니다.선택 하위 쿼리

CREATE TABLE TEMP1 (BUSINESS_UNIT VARCHAR(5) NOT NULL, 
NATIONAL_ID VARCHAR(20) NOT NULL, 
ACCOUNT_BALANCE DECIMAL(12, 2) NOT NULL, 
STRM VARCHAR(4) NOT NULL, 
FIRST_NAME_SRCH VARCHAR(30) NOT NULL, 
LAST_NAME_SRCH VARCHAR(30) NOT NULL, 
COMMON_ID VARCHAR(8) NOT NULL) 


INSERT INTO TEMP1 (BUSINESS_UNIT, NATIONAL_ID, ACCOUNT_BALANCE, STRM, 
FIRST_NAME_SRCH, LAST_NAME_SRCH, COMMON_ID) 
(SELECT ASF.BUSINESS_UNIT, NATL.NATIONAL_ID, ASF.ACCOUNT_BALANCE, '1162' 
,NM.FIRST_NAME_SRCH,NM.LAST_NAME_SRCH,ASF.EMPLID 
FROM PS_ACCOUNT_SF ASF (NOLOCK) 
, PS_NAMES NM (NOLOCK) 
, PS_PERS_NID NATL (NOLOCK) 
WHERE ASF.BUSINESS_UNIT = 'ABCDEFG' 
AND ASF.ACCOUNT_TERM = '1162' 
AND ASF.ACCOUNT_BALANCE > 0 
.......... more code, etc. 

선택 항목이 15 개로 반환되었습니다. 샘플 행 : 이제

ABCD1 123456789 46.30 1162 JOHN SMITH 12345678 

, 나는 나는 그것이 성공 '12345678'와 같은 선택과 하드 코드 무언가에 ASF.EMPLID 필드를 주석 때 때문에이 EMPLID 필드가 있다고 알아낼 수 있었다. 그러나 반환 된 값의 길이를 확인한 결과 모두 8이었습니다.

선택한 필드 ASF.EMPLID는 VARCHAR (11)이며 대상 필드는 VARCHAR (8)이라는 점에 유의해야합니다. 내 솔루션은 COMMON_ID VARCHAR (8)을 VARCHAR (11)로 변경하는 것이 좋았습니다. 하지만 내 질문은 여전히 ​​남아 있습니다 ... 값의 길이가 8 인 경우 중요합니까? 아니면 다른 일이 있습니까? 이 후 작동하는 경우

마이크로 소프트 SQL 서버 2014 (SP1-GDR)

+0

이미 "문제"를 발견했습니다. 소스는 11 자이며 대상은 8 자입니다.이 경고는 단지 3자를 잃을 수도 있다는 것을 알려주는 것입니다. – Hogan

+0

오류가 발생하여 처리가 중지되었습니다. 'SQLExecute error ... 문이 종료되었습니다.' 그렇다면 여러분이 말하는 것은 - 값의 길이가 ok 인 경우에도 원본과 대상 필드 길이가 일치하지 않는 것이 중요합니다. – user3760332

+0

예 고칠 때까지 작동하지 않는 경고입니다. 그러니 캐스트를하고 그것이 당신이 원하는 것이거나 목적지를 더 크게 만드는 것이라면 명시 적으로 만드십시오. – Hogan

답변

0

8 예 에 렌 substing 또는 왼쪽 설정 최대를 사용해보십시오 왼쪽 선택 (필드, 8) 테이블 에서 당신은 당신이 절단 문제를 알고 . 즉 일부 필드가> 8