문제

저는 Fox Pro 데이터베이스에서 많은 양의 데이터를 가져와서 작업하고 mysql db에 삽입하려고 합니다.한꺼번에 처리하기에는 너무 많은 일이므로 10,000개의 레코드를 일괄적으로 처리하고 싶습니다.Fox Pro SQL의 LIMIT 5, 10에 해당하는 것은 다음과 같은 선택 문을 원합니다.

인원 제한 5, 10 중에서 이름, 주소를 선택하세요.

즉, 5일부터 시작하여 10개의 결과만 반환됩니다.온라인으로 둘러본 결과 별로 쓸모가 없는 top에 대해서만 언급했습니다.

도움이 되었습니까?

해결책

FoxPro는 한계 조항에 대한 직접적인 지원이 없습니다. "Top NN"은 있지만 주어진 백분율 내에서 "최상위 레코드"만 제공하며 심지어 32k 레코드가 반환 된 (최대)의 제한을 제공합니다.

데이터를 CSV로 덤프하거나 실용적이지 않은 경우 (크기 문제로 인해) 일련의 시작 정보 (x10000)-커밋 문을 자동 생성하는 작은 FoxPro 스크립트를 작성하는 것이 좋습니다. 일련의 텍스트 파일. 물론,이를 위해 FoxPro 개발 환경이 필요하므로 상황에는 적용되지 않을 수 있습니다 ...

다른 팁

살펴보십시오 recno () 기능.

Visual FoxPro는 한계를 직접 지원하지 않습니다. 다음 쿼리를 사용하여 제한을 극복했습니다. SELECT TOP 100 * from PEOPLE WHERE RECNO() > 1000 ORDER BY ID;여기서 100은 한계이고 1000은 오프셋입니다.

상단 절을 사용하여 한계 조항을 얻는 것은 매우 쉽습니다. _test라는 파일에서 _finish를 기록하기 위해 레코드에서 추출하려면 다음을 수행 할 수 있습니다.

VFP

** _start <= _finish를 가정하면 상단 절로 오류가 발생하지 않으면

*

_finish = min (Reccount ( '_ test'), _ finish)

*

선택 *에서 (선택 (_finish -_start + 1) *에서 (_tempo desc의 _tempo에서 _tempo에서 _tempo as _tempo) xx 주문에 의한 xx yy order by _tempo

**

/VFP

몇 년 전에 FoxPro 데이터베이스를 MySQL로 변환해야했습니다. 내가 이것을 해결하기 위해 한 일은 FoxPro 테이블에 자동 침입 ID 열을 추가하여 행 참조로 사용하는 것이 었습니다.

그래서 당신은 같은 일을 할 수 있습니다.

select name, address from people where id >= 5 and id <= 10;

그만큼 FoxPro SQL 문서 한계와 비슷한 것을 보여주지 않습니다.

여기에서 이것을 테이블에 조정하십시오. 나를 2 분처럼 가져 갔다. 나는이 waaaay를 너무 자주한다.

N1- 그룹으로 그룹화하고 최대 (ID)가 있는지 확인하면 recno ()를 사용하여 올바르게 정렬 할 수 있습니다.

N2- N1에 결합 된 ID = MAX ID N1, N2에서 원하는 필드를 표시합니다.

그런 다음 다른 테이블에 가입하려면 모든 것을 괄호 안에 넣고 별칭을 제공하고 조인에 포함시킵니다.

Select N1.reference, N1.OrderNoteCount, N2.notes_desc LastNote
FROM
(select reference, count(reference) OrderNoteCount, Max(notes_key) MaxNoteId
from custnote 
where  reference != '' 
Group by reference
) N1
JOIN 
(
select reference, count(reference) OrderNoteCount, notes_key, notes_desc
from custnote 
where  reference != '' 
Group by reference, notes_key, notes_desc
) N2 ON N1.MaxNoteId = N2.notes_key

Eyvind의 답변을 확장하기 위해 RecNo() 함수를 사용하여 주어진 범위(예: 10,000개의 레코드) 내에서 레코드를 가져오는 프로그램을 만들겠습니다.

그런 다음 한 번에 10,000개의 레코드로 구성된 대규모 테이블을 프로그래밍 방식으로 순환하고 MySQL 데이터베이스에 데이터 로드를 수행할 수 있습니다.

RecNO() 함수를 사용하면 행을 두 번 이상 삽입하지 않고 데이터 로드 프로세스의 알려진 지점에서 다시 시작할 수 있습니다.이는 로드 프로세스를 중지하고 다시 시작해야 하는 경우 그 자체로 매우 편리할 수 있습니다.

반환 된 행의 수와 .NET 프레임 워크를 사용하는 경우 다음과 같은 방법으로 gotten 데이터 가능을 오프셋/제한 할 수 있습니다.

dataTable = dataTable.AsEnumerable().Skip(offset).Take(limit).CopyToDataTable();

어셈블리 시스템을 추가해야합니다 .data.datasetextensions.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top