을 사용하면 문자열 또는 이진 데이터가 잘립니다. 일반적으로이 오류는 필드 중 하나가 너무 커서 데이터 길이를 포함 할 수 없음을 의미합니다. 그래서 그것이 내가 시작한 곳입니다. 공백을 검사하기 위해 값의 앞과 뒤의 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)
이미 "문제"를 발견했습니다. 소스는 11 자이며 대상은 8 자입니다.이 경고는 단지 3자를 잃을 수도 있다는 것을 알려주는 것입니다. – Hogan
오류가 발생하여 처리가 중지되었습니다. 'SQLExecute error ... 문이 종료되었습니다.' 그렇다면 여러분이 말하는 것은 - 값의 길이가 ok 인 경우에도 원본과 대상 필드 길이가 일치하지 않는 것이 중요합니다. – user3760332
예 고칠 때까지 작동하지 않는 경고입니다. 그러니 캐스트를하고 그것이 당신이 원하는 것이거나 목적지를 더 크게 만드는 것이라면 명시 적으로 만드십시오. – Hogan