Использование OPENROWSET(BULK...)
- это путь, если вы не можете предварительно отфильтровать файл.
INSERT INTO table1 (col1, col2, ..., colN)
SELECT col1, col2, ..., colN
FROM OPENROWSET(BULK '<data_file_name>.txt', FORMATFILE = '<format_file_name>.xml') AS a
WHERE ...
В качестве дополнительного преимущества вы можете дополнительно преобразовывать данные из файла с помощью функций и таблиц поиска, а также добавлять соединения к другим таблицам для фильтрации, но вам нужно помнить о последствиях для производительности.
INSERT INTO table1 (col1, col2, ..., colN)
SELECT a.col1, a.col2, ..., a.colN
FROM OPENROWSET(BULK '<data_file_name>.txt', FORMATFILE = '<format_file_name>.xml') AS a
INNER JOIN ...
ON ...
LEFT JOIN ...
ON ...
WHERE ...
См. раздел Импорт массовых данных с помощью BULK INSERT или OPENROWSET(BULK...) а>
Обратите внимание, что использование OPENROWSET(BULK...)
потребует от вас создания файла форматирования в формате XML или в формате, отличном от XML. Оба формата файлов могут быть сложными для написания вручную и легко ошибиться. Ваша работа будет проще, если вы сможете начать с сгенерированного файла и внести необходимые изменения. Сгенерируйте файл формата с помощью программы bcp
. Предпочтительнее формат XML (аргумент -x
).
bcp <table_or_view> format nul -f<format_file_name>.xml -x
См. раздел Создание файла форматирования.
person
Mark Chesney
schedule
23.02.2017