Я нашел более быстрый и простой способ выполнить это.
Сначала скопируйте таблицу (или запрос) в файл с разделителями табуляции следующим образом:
COPY (SELECT siteid, searchdist, listtype, list, sitename, county, street,
city, state, zip, georesult, elevation, lat, lng, wkt, unlocated_bool,
id, status, standard_status, date_opened_or_reported, date_closed,
notes, list_type_description FROM mlocal) TO 'c:\SQLAzureImportFiles\data_script_mlocal.tsv' NULL E''
Затем вы нужно создать таблицу в SQL, это не будет обрабатывать никакую схему для вас. Схема должна соответствовать вашему экспортированному файлу TSV в полевом порядке и типах данных.
Наконец, вы запускаете утилиту SQL bcp для ввода файла tsv следующим образом:
bcp MyDb.dbo.mlocal in "\\NEWDBSERVER\SQLAzureImportFiles\data_script_mlocal.tsv" -S tcp:YourDBServer.database.windows.net -U YourUserName -P YourPassword -c
Несколько что я столкнулся. Postgres и SQL Server обрабатывают логические поля по-разному. Для вашей схемы SQL Server необходимо, чтобы ваши логические поля были установлены в varchar (1), а полученные данные будут «f», «t» или «null». Затем вам нужно будет немного перевести это поле. что-то вроде:
ALTER TABLE mlocal ADD unlocated bit;
UPDATE mlocal SET unlocated=1 WHERE unlocated_bool='t';
UPDATE mlocal SET unlocated=0 WHERE unlocated_bool='f';
ALTER TABLE mlocal DROP COLUMN unlocated_bool;
Другое дело, что поля географии / геометрии очень разные между двумя платформами. Экспортируйте поля геометрии как WKT с помощью ST_AsText(geo)
и соответствующим образом конвертируйте на конец SQL Server.
Может быть больше несовместимостей, требующих таких настроек.
EDIT. Поэтому, когда этот метод технически работает, я пытаюсь передать несколько миллионов записей из 100 + таблиц в SQL Azure и bcp в SQL Azure, это довольно flaky получается. Я продолжаю получать прерывистый Невозможно открыть ошибки BCP host data-file , сервер периодически отключается, и по какой-то причине некоторые записи не передаются без признаков ошибок или проблем. Таким образом, этот метод нестабилен для передачи больших объемов данных Azure SQL.
Если Вы хотите выйти из программы из-за фатальной ошибки, используйте:
sys.exit("Your program caused a fatal error. ... description ...")
и import sys
в заголовке.