SQL Объемная Вставка с параметром FIRSTROW пропускает следующую строку

Вы можете использовать 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

8
задан gibbo 22 June 2009 в 10:09
поделиться

2 ответа

Я не думаю, что вы можете пропустить строки в другом формате с помощью 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.

14
ответ дан 3 November 2019 в 14:20
поделиться

Может быть, проверить, имеет ли заголовок тот же конец строки, что и фактические строки данных (как указано в ROWTERMINATOR )?

Обновление: из MSDN :

Атрибут FIRSTROW не предназначен чтобы пропустить заголовки столбцов. Пропуская заголовки не поддерживаются BULK Инструкция INSERT. При пропуске строк ядро СУБД SQL Server выглядит только на терминаторах поля, и не проверяет данные в поля пропущенных строк.

8
ответ дан 3 November 2019 в 14:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: