2011-01-25 4 views
0

this 질문에있는 다음 SQL 문을 사용하여 하나의 Access 테이블에서 연결된 SQL Server 테이블로 데이터를 삽입하려고했지만 내 목적에 맞게 수정되었습니다. 오버플로 '를 오류 메시지로 입력하십시오.다른 테이블에 하위 쿼리가 삽입되었습니다. 오버플로 오류

INSERT INTO dbo_tblGageActivity(strGageID, strCustJobNum, datDateEntered, datTimeEntered) 
SELECT [Gage ID] as GageID, [Customer Job#] as JobNum, [Date] as DateEntered, 
[Time Entered] as TimeEntered FROM TblInstTrak; 

이 방법을 여러 번 사용해 보았습니다. 결과적으로'오버플로 '오류가 발생했습니다. 나는 뭔가를 놓쳐 버렸을 것이다. 그러나 나에게있어서 나는 무엇이 있는지 모른다. 하나 이상의 Insert 하위 쿼리를 처리하기에는> 100,000 레코드가 너무 많습니까?

- - 편집 2011년 1월 25일 @ 1540 시간 다음

데이터 유형 및 필드들의 크기는 :

TblInstTrak   Type:Size  Required  dbo_tblGageActivity   Type:Size  Required 
---------------------------------------------------------------------------------------------------- 
Gage ID    Text:50  True   strGageID     Text:50  True 
Customer Job#  Text:50  False  strCustJobNum    Text:50  True 
Date     Date/Time:8 False  datDateEntered    Date/Time:8 True 
Time Entered   Date/Time:8 False  datTimeEntered    Date/Time:8 True 

- 1355 @ 2011년 1월 26일를 편집 시간 -

좋아 - 나는 며칠 동안 내 머리를 쾅쾅 대고 있었다. (내가 그와 함께하기 전에, 그리고 그곳에 왔던 날) 나는 유일한 차이점은 로컬 앱 측의 입력 날짜 필드는 'm/d/yyyy'로 포맷되고 로컬 앱 측의 입력 시간 필드 'Long Time'으로 포맷되어 있습니다. SQL Server 테이블의이 필드에는 어떤 형식도 설정되어 있지 않습니다.

성능상의 이유로 모든 데이터를 테이블로 가져 오는 더 좋은 방법이 있는지 궁금해졌습니다. 로컬 앱의 업데이트를 미러 SQL Server 복사본으로 가져옵니다. SQL Server 측 복사본에 입력 된 데이터는 없습니다. 테스트 응용 프로그램의 성능에만 사용됩니다. 변경 사항은 로컬 응용 프로그램쪽에 있습니다. 이 접근 방식은 SQL Server 데이터베이스 테이블을 지우고 업데이트 할 때마다 다시 채우기보다 쉬울까요?

- 나는 다음에 내 수입 SQL 문을 수정 (이에 저를 가리키는 주셔서 감사합니다 데이비드 펜톤) 로마 제국 시절 주변에서 일부 날짜를 찾은 후

- 2011년 1월 28일 1236 @ 시간을 편집 :

INSERT INTO dbo_tblGageActivity(strGageID, strCustJobNum, datDateEntered, datTimeEntered) 
SELECT [Gage ID] as GageID, [Customer Job#] as JobNum, [Date] as DateEntered, 
[Time Entered] as TimeEntered FROM TblInstTrak WHERE [Date] >=1/1/1900; 

내가 정말 좋은 답변을 몇 가지 가지고, 나는 단 하나의 대답 (정신적 고통) 너무 화가하지 마십시오을 선택할 수 있습니다 -이 정말 정말 배울 수있었습니다. 당신은 OLEDB 공급자를 사용하여 연결 한 경우

+0

당신은 전혀 행을 삽입 할 수 있습니까? – Matthew

+2

원본 및 대상 열의 데이터 형식은 무엇입니까? –

+0

아니, 약 2 분 동안 작동 - 그럼 오버플로 오류 던졌습니다 - 아무 것도 대상 테이블 (dbo_tblGageActivity)의 결과입니다 –

답변

1

SQL Server 날짜/시간 필드의 범위를 벗어나는 Access에 날짜 값이 있습니까? 오래된 Access 데이터베이스를 SQL Server로 업 사이즈 할 때 발생하는 매우 일반적인 문제입니다. 실제로 로마 제국 시대의 손가락 오류가 많이 있습니다!

+0

원본 데이터를 살펴 보았는데 '완만한 날짜', 1/4/111, 5/4/111, 12/1/804, 6/1/822의 네 가지 항목이 있습니다. 몇 몇은 20 세기 초에 날짜를 가지고 있지만, 지역 데이터베이스에서 유효하기 때문에 그대로 가져 오면 안됩니까? –

+1

@Comrad_Durandal : 'smalldatetime'의 더 낮은 날짜 바운드는 1/1/1900입니다. 'datetime'의 경우 1/1/1753입니다. 보시다시피, '완고한 데이트'는 둘 중 어느 것과도 맞지 않습니다. 그래서 그들은 당신의 문제의 원인 일 가능성이 큽니다. –

+0

@ Andriy M - 정상적인 행을 가져올 수 있지만 이러한 행 가져 오기를 방지하려면 어떻게해야합니까? –

3

선택한 행의 한 개 이상의 값이 않기 때문에 오버 플로우가 발생합니다 삽입하려는 테이블에 맞지 않습니다. 즉, TblInstTrak에 당신은 dbo_tblGageActivity에서 각각의 컬럼에 맞지 않는 값이 있습니다. 두 테이블의 정의를 비교하고 대상 테이블 컬럼이 소스 테이블의 데이터를 수용 할만큼 충분히 넓은 지 확인하십시오.

+0

문제는 내가 한 것입니다. 두 컬럼 모두 동일합니다. SQL Server 테이블에는 원본 테이블에없는 고유 한 ID 열이 있습니다. SELECT 하위 쿼리를 제한하면 작동하지 않습니다. barfs입니다. –

관련 문제