Можно ли экспортировать каждые 1000 строк в CSV из SQL с помощью BCP? - PullRequest
0 голосов
/ 26 апреля 2019

У меня есть процедура, которая вызывает другую процедуру, которая делает запрос и генерирует CSV-файл, и работает нормально, проблема в том, что есть много контактов, и мне нужно разделить на несколько файлов каждые 1000 контактов, это возможно сделать это?

Спасибо.

1 Ответ

0 голосов
/ 26 апреля 2019

Нет, невозможно разделить файл с помощью BCP. Команда BCP позволяет указывать только один целевой файл при использовании опции "out" или "queryout".

Чтобы разбить ваш отдельный набор данных на несколько файлов, сначала разбейте его на SQL и выполните BCP для каждого куска.

Другой вариант (при условии, что 1000 записей не является жестким требованием, вы просто хотите разбить данные на более мелкие порции) - хранить данные в одной таблице и запрашивать данные с помощью BCP, а не использовать опцию «out» , Для этого вам понадобится столбец в ваших данных, который вы можете использовать для разделения данных на куски. Любое числовое поле идентификатора отлично подходит для этого. Выполните bcp с запросом вне и добавьте предложение where, чтобы отфильтровать строки, разделив данные с помощью числового ключа. Как это:

"select * from db.dbo.your_table, где right (приведен (num_key) как varchar (12)), 1) = '0'"

и

"select * from db.dbo.your_table, где right (приведен (num_key) как varchar (12)), 1) = '1'"

и

"select * from db.dbo.your_table, где right (приведен (num_key) как varchar (12)), 1) = '2'"

и .... и так далее, до тех пор, пока вы не получите все от 0 до 9. Это должно хорошо разделить наши данные на 10 блоков равномерного размера. Если вам нужны куски меньшего размера, используйте 2 символа в конце вашей цифровой клавиши и получите 100 кусков. Множество других способов разделения данных таким образом.

Но, в конце концов, вы также собираетесь выполнить 10 операторов bcp. 1 BCP оператор на файл создан.

...