Я нашел более быстрый и простой способ сделать это.
Сначала скопируйте вашу таблицу (или запрос) в файл с разделителями табуляции, например, так:
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 в порядке полей и типах данных.
Наконец, вы запускаете утилиту bcp SQL, чтобы получить файл 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.
Может быть больше несовместимостей, нуждающихся в таких настройках.
РЕДАКТИРОВАТЬ.Таким образом, хотя этот метод технически работает, я пытаюсь перенести несколько миллионов записей из более чем 100 таблиц в SQL Azure, а bcp в SQL Azure оказывается довольно нестабильным.Я постоянно получаю Невозможно открыть ошибки файла данных хоста BCP , сервер периодически прерывается, и по какой-то причине некоторые записи не передаются без признаков ошибок или проблем.Поэтому этот метод нестабилен для передачи больших объемов данных в Azure SQL.