Вы можете использовать postgresql Cursors
BEGIN;
DECLARE C CURSOR FOR where * FROM msgtable where cdate='18/07/2012';
Затем используйте
FETCH 10 FROM C;
, чтобы получить 10 строк.
Финский с
COMMIT;
, чтобы закрыть курсор.
Но если вам нужно сделать запрос в разных процессах, лучше использовать LIMIT и OFFSET, как предложено @Praveen Kumar
Я не думаю, что вы можете пропустить строки в другом формате с помощью BULK INSERT
/ BCP
.
Когда я запустил это:
TRUNCATE TABLE so1029384
BULK INSERT so1029384
FROM 'C:\Data\test\so1029384.txt'
WITH
(
--FIRSTROW = 2,
FIELDTERMINATOR= '|',
ROWTERMINATOR = '\n'
)
SELECT * FROM so1029384
Я получаю:
col1 col2 col3
-------------------------------------------------- -------------------------------------------------- --------------------------------------------------
***A NICE HEADER HERE***
0000001234 SSNV 00013893-03JUN09
0000005678 ABCD 00013893-03JUN09
0000009112 0000 00013893-03JUN09
0000009112 0000 00013893-03JUN09
Похоже, для этого требуется '|' даже в данных заголовка, потому что он считывает это в первом столбце - поглощает новую строку в первом столбце. Очевидно, что если вы включаете параметр терминатора поля, он ожидает, что каждая строка ДОЛЖНА иметь его.
Вы можете удалить строку с помощью шага предварительной обработки. Другая возможность - выбрать только полные строки, а затем обработать их (исключая заголовок). Или используйте инструмент, который может справиться с этим, например SSIS.
Может быть, проверить, имеет ли заголовок тот же конец строки, что и фактические строки данных (как указано в ROWTERMINATOR
)?
Обновление: из MSDN :
Атрибут FIRSTROW не предназначен чтобы пропустить заголовки столбцов. Пропуская заголовки не поддерживаются BULK Инструкция INSERT. При пропуске строк ядро СУБД SQL Server выглядит только на терминаторах поля, и не проверяет данные в поля пропущенных строк.