Импорт CSV в SQL Server
CSV представляет собой компактный текстовый формат для хранения табличных данных. С файлами в формате CSV способны работать (экспортировать/импортировать данные) все современные приложения для работы с таблицами (например, Excel). Не так давно передо мной возникла задача выгрузить данные из CSV-файла в базу данных. Решение этой проблемы я приведу в данной статье.
Использование оператора BULK INSERT
Оператор BULK INSERT в SQL Server позволяет осуществлять импорт данных из файла в таблицу. В предложении WITH для данного оператора можно задавать множество опций, но нам нужны только две из них:
FIELDTERMINATOR
Указывает разделить для столбцов. По умолчанию, разделителем является символ табуляции (\t). В CSV разделителем по умолчанию является запятая.
ROWTERMINATOR
Указывает разделитель для строк.
Давайте попробуем выгрузить данные для простого CSV-Файла. Этот файл содержит 10 строк для простого отчета и вы можете скачать его по следующей ссылке. Используйте следующий код:
IF (OBJECT_ID('CSV_Export') IS NOT NULL) DROP TABLE dbo.CSV_Export; CREATE TABLE CSV_Export ( DateReport VARCHAR(15), CountView INT, CountClicks INT, CTR FLOAT, RPM FLOAT, Profit FLOAT ) BULK INSERT dbo.CSV_Export FROM 'D:\Report.csv' WITH (fieldterminator = ' ', rowterminator = '\n');
В качестве разделителя в исходном CSV-файле используется знак табуляции (Tab). В CSV также можно использовать запятые, точки с запятой и другие символы в качестве разделителя столбцов. Главное указать символ в параметре FIELDTERMINATOR.
Выберите теперь все строки из таблицы CSV_Export с помощью оператора SELECT для проверки результата:
select top 100 * from CSV_Export;
На рисунке ниже показан результат:

Как правило, данные из CSV-файла нужно сохранять во временную таблицу, а затем из нее вставлять в основную, т.к. зачастую необходимо парсить даты, числа с плавающей запятой и другие форматы. Их можно спарсить в строку во временной таблице и привести к нужному формату в основной. Например, если мы изменим тип столбца DateReport на DATETIME, SQL Server выдаст следующую ошибку:

В следующем примере показано, как можно обойти эту ошибку и получить дату:
-- Создаем временную таблицу и импортируем данные из CSV IF (OBJECT_ID('tempdb..#csv_temp') IS NOT NULL) DROP TABLE #csv_temp; CREATE TABLE #csv_temp ( DateReport VARCHAR(15), CountView INT, CountClicks INT, CTR FLOAT, RPM FLOAT, Profit FLOAT ); BULK INSERT #csv_temp FROM 'D:\Report.csv' WITH (fieldterminator = ' ', rowterminator = '\n'); -- Создаем основную таблицу IF (OBJECT_ID('CSV_Export') IS NOT NULL) DROP TABLE dbo.CSV_Export; CREATE TABLE CSV_Export ( DateReport DATETIME, CountView INT, CountClicks INT, CTR FLOAT, RPM FLOAT, Profit FLOAT ) -- Заполняем данными из временной таблицы INSERT INTO CSV_Export SELECT CONVERT(datetime, DateReport, 105), -- Строку в дату CountView, CountClicks, CTR, RPM, Profit FROM #csv_temp; -- Проверить select top 100 * from CSV_Export;
Теперь в основной таблице столбец DateReport будет храниться в формате даты:

Использование SQL Server Management Studio
Импортировать данные из CSV можно стандартными средствами программы SQL Server Management Studio. Для этого выполните следующие шаги:
-
В обозревателе объектов Object Explorer выберите целевую базу данных, щелкните по ней правой кнопкой мыши и выберите из контекстного меню команду Tasks —> Import Data.







На следующем рисунке отображена сгенерированная таблица report в окне Object Explorer:

Теперь выполните следующую инструкцию:
INSERT INTO CSV_Export SELECT CONVERT(datetime, DateReport, 105), -- Строку в дату CountView, CountClicks, CTR, RPM, Profit FROM report; select top 100 * from CSV_Export;
В результате мы получим результаты, аналогичные подходу с использованием кода.
- C# тест (легкий)
- .NET тест (средний)
SQL-Ex blog

Импорт CSV в SQL Server не должен быть таким сложным
Добавил Sergey Moiseenko on Суббота, 12 февраля. 2022
Как и многим из вас, недавно мне потребовалось импортировать некоторые данные в формате CSV (файл с разделителями-запятыми) в SQL Server. Это не был новый процесс, или приложение, которое требовало улучшения, и даже не необходимость в построении процесса ETL (извлечь, преобразовать, загрузить). Это был отдельный полуразовый запрос. С запросами подобного типа из разных источников я сталкивался годами. Администратор ли вы баз данных или разработчик, получив некие данные, вам хочется, чтобы они были очищены и представлены в структурированном формате, чтобы можно было легко создать отчет или проанализировать информацию.
В данном случае жена попросила помочь ей с налогами. Она экспортировала данные из различных банков и бухгалтерских систем и хотела получить отчеты с консолидированными данными.
В этой статье рассматриваются некоторые неприятности и разочарования в работе с CSV в SQL Server, некоторые их которых, как я считаю, не вполне обязательны.
Беспорядочных данные
Как и некоторые из вас, я не люблю получать данные CSV со стороны. Если эти данные формирую я, то все прекрасно. Обычно я экспортирую данные таким образом, чтобы их легко было импортировать. Когда я получаю чужой CSV, обычно это не доставляет мне удовольствия. В данном случае жена прислала мне 2 zip файла с данными. Один был от Venmo, а другой — от Paypal. Архив Venmo содержал 12 файлов, по одному на каждый месяц. Каждый любовно именовался типа venmo_statement (1).csv, venmo_statement (2).csv и т.д. Архив Paypal содержал PDF на каждый месяц и один csv за весь год. По крайней мере, я буду проклинать Paypal только один раз во время всего процесса.
Часто первым шагом является просмотр данных. Содержимое Venmo представляло собой множество полей со строкой заголовка, содержащего начальный баланс, и последней строкой, содержащей конечный баланс. Имелось также несколько прекрасных разделов в середине с интересными символами. Вот пример поля внутри CSV.

Очевидно, я не буду импортировать такое в поля varchar().
Когда я открыл это в Sublime Text, чтобы получить представление о структуре, то увидел следующее:
Username,ID,Datetime,Type,Status,Note,From,To,Amount (total),Amount (fee),Funding Source,Destination,Beginning Balance,Ending Balance,Statement Period Venmo Fees,Terminal Location,Year to Date Venmo Fees,Disclaimer
HerdofTwo. $500.00.
,5555555555555555,2020-01-10T02:50:47,Payment,Complete,Stock show,Cowboy Joe,My Wife,+ $10.00. Venmo balance. Venmo,,
,555555555555555,2020-01-16T14:12:08,Payment,Complete,»You’re magic ?? (sorry, totally spaced it)»,Random Person,My Wife,+ $50.00. Venmo balance. Venmo,,
Данные Paypal были проще и более структурированы, например:
«Date»,»Time»,»TimeZone»,»Name»,»Type»,»Status»,»Currency»,»Amount»,»Receipt ID»,»Balance»
«01/01/2020″,»19:04:43″,»PST»,»Sandra Dee»,»Mobile Payment»,»Completed»,»USD»,»500.00″,»»,»1,000.00″
Не так плохо, верно? Давайте начинать.
Настройка в SSMS
На первом шаге была создана база данных. Это легко. Затем я решил использовать мастер импорта плоского файла для загрузки моих данных. Это 12 файлов, и к тому времени, когда я действительно что-то запрограммирую, я могу легко пройти с мастером 12 раз.

Мастер простой, и он позволяет вам выбрать файл и создать таблицу. Я пройду это. После запуска мастера, я выбираю файл и даю имя таблице. Имя и схема предлагаются, но я могу их изменить.

Я не могу выбрать более одного файла, Это действительно мастер разового типа. Ну и хорошо. Я в состоянии сделать это 12 раз.
Затем я предварительно просматриваю данные. Я прокручиваю и не вижу ниже ничего, что бы было похоже на персональные данные. Однако вы можете видеть там предупреждение, что некоторые имена были изменены. Я подозреваю, что это имена столбцов, поскольку в CSV, вероятно, есть некоторые конфликты с ключевыми словами. Я мог бы использовать обнаружение расширенного типа данных, но не уверен, что будет лучше. Здесь всего 5 строк, поэтому экспериментировать особо не с чем.

Следующий шаг мастера — сопоставление типов данных для таблицы. Здесь я могу изменить типы, установить первичный ключ, допустимость NULL, и т.п. В моем случае nvarchar() нормально подходит для этих полей. Одна проблема с полем ID, который действительно должен быть строкового типа. На самом деле, я позже понял, что не позаботился о большинстве этих полей, но для начала мне нужно было загрузить их.

После этого я получаю резюме, и могу щелкнуть Finish, чтобы загрузить данные. Это работает быстро и успешно.

Это сработало, и я получил странную промежуточную таблицу. Однако всякий раз, когда я выполняю это, я получаю разные имена таблиц, что означает, что мне потребуются 12 операторов, чтобы собрать данные вместе. Это не конец света, но неудобно. Если я попытаюсь снова выполнить это, выбрав другой плоский файл и использовав то же самое имя таблицы, то получу такое сообщение:

Я не понимаю, к чему это ограничение. Могу предположить, что мастер настолько прост, что логика работы с существующей таблицей не была запрограммирована. Видимо, недосмотр, плохая спецификация, и разработчик, который сосредоточился на определенных задачах, не думал, как люди будут это использовать. И плохое руководство со стороны менеджмента, но это работает.
И вообще, это был неплохой опыт, но он потребовал повторения импорта 12 файлов. Фактически 13, поскольку я должен еще получить оператор для загрузки PayPal.
Мастер импорта данных в SSMS
После моего первого импорта я подумал об использовании мастера импорта данных. Он достигается щелчком правой кнопкой на базе данных и выборе пункта контекстного меню Task (Задачи), как показано ниже.

Я думал, что это может стать лучшим вариантом, поскольку позволяет построить пакет SSIS, и может быть я смогу добавить туда цикл, и загрузить данные в одну таблицу. Я также думал, что было бы замечательно выполнять его ежемесячно по мере того, как моя жена будет получать новые файлы.
Работа мастера начинается с выбора источника данных. Я выбрал плоский файл, а затем мой файл. Первое недоумение посетило меня, когда я выбирал файл. Несмотря на сообщение «flat file source» (источник — плоский файл), по умолчанию в проводнике выбирались файлы .txt, что показано ниже.

Действительно плохой интерфейс. Я думал, что вариантами по умолчанию являются .txt, .csv и .tsv. Я знаю, что проводник может это делать, т.е. это просто ленивое программирование.
В любом случае, я могу выбрать мой файл, и большинство вещей корректно обнаруживается. Похоже, он отлично выберет данные из файла.

Затем я выбираю назначение. Я предпочитаю использовать драйвер OLEDB, главным образом из-за простых настроек строки подключения. Это работало в данном случае так же, как провайдер .NET.
Здесь есть несколько раздражающих настроек по умолчанию. Во-первых, когда я выбираю свойства драйвера, диалоговое окно всегда открывается в верхнем правом углу моего монитора по умолчанию. В моем случае это слева монитора, и это остается вне поля моего зрения. Я не замечаю этого мастера, и я не понимаю, почему он не открывается рядом с существующим открытым диалоговым окном.
Во-вторых, по умолчанию принимается авторизация SQL. Хотя все рекомендации, которые я видел от Microsoft, предлагали использовать авторизацию Windows, так почему бы не сделать её выбор по умолчанию? Далее, установлен флажок «Blank password» (пустой пароль), что нарушает, на мой взгляд, требования безопасности.

Возможно, последнее — здесь имеется множество настроек, которые я не часто изменяю. Думаю, что большинство людей также. Мы хотим ввести экземпляр и выбрать базу данных. Я должен перемещать мышку, изменять авторизацию и т.д. Разместите вначале то, что я использую изначально, и уберите все остальное на другие вкладки. В конце концов, разве в этом диалоговом окне нет вкладок?
После высказывания своего раздражения я вижу источник и назначение. Я могу отредактировать соответствие, после чего все выглядит, по большей части, нормально.

Теперь я могу просмотреть резюме, сохранить пакет SSIS, и выполнить его. Однако я получаю вот что в результате простого импорта.

Хм, ошибка усечения. В этом файле только 5 строк, так почему мастер не смог подобрать правильный размер? Я вернулся и нашел это поле со значением по умолчанию varchar(50). Слишком мало, да и тип неверный, поэтому я меняю его на nvarchar(1050). Снова отказ. Тогда я меняю на 4000, что далеко превосходит то, что делал импорт плоских файлов (Flat File Import). Все равно не работает.
Тут я заподозрил некую ошибку кодовой страницы, но отладка показалась мне большей работой, чем импорт 12 файлов каждый год в течение десятилетия. Наверняка кто-то знает об этой проблеме, и, надеюсь, сообщит мне, поскольку в настоящее время я немного злюсь на разработчиков, создавших эту штуку. Я надеялся сделать жизнь проще, но это оказалось не так.
ADS
Azure Data Studio (ADS) имеет расширение для импорта в SQL Server, которое вы можете попробовать. Оно устанавливается из маркетплейса, и затем вы увидите это, когда щелкните на расширении.

Если вы прокрутите вниз, то увидите CTRL+I для запуска мастера. Первый раз у меня ушло 8-10с до появления диалога подключения, так что будьте терпеливы. Потом диалог открывается быстро. Также нет никакого значка этого подключения, которое отличало бы соединение с мастером импорта от обычного соединения с сервером, так что будьте осторожны.
Я подключился к моей базе данных и получил страницу настроек, во многом похожую на мастера плоских файлов SSMS.

Щелкаю Next, и перехожу к предварительному просмотру моих данных.

Затем я получил шанс проверить типы данных. Я пропустил это, т.к. было интересно, насколько хорошо это сработает, особенно учитывая небольшое число строк моих данных.

Затем мы получаем финальную страницу, и импорт начинается. У меня сразу выскочила ошибка. Теперь это было currency -> numeric (преобразование денег в число). Хотя я понимаю, что база данных не должна знать все символы денежных единиц, подумалось, что тут мастер мог бы оказаться поумнее. Если он распознал это как число, тогда он мог бы убрать разделители тысяч и символы валюты, особенно для моих текущих региональных настроек.

Я вернулся и поменял все числовые поля на nvarchar, и прошел до конца мастера. Теперь заработало.

Что мне понравилось в этом мастере, что там были не только кнопка «Done» или «OK», но также кнопка «Import new file» (импортировать новый файл). Это позволяет перезапустить мастера без лишних нажатий клавиш. Что и должно делать программное обеспечение. При этом мастер открывается с моими параметрами соединения и кнопкой «browse» (просматривать), позволяющей вернуться в последнему местоположению для выбора плоского файла.

Когда я сделал это и выбрал новый файл, я указал то же имя таблицы, которую я использовал для предыдущего файла. Я прошел до конца мастера, когда получил следующую ошибку. Я бы хотел получить это сообщение сразу, как только я выбрал существующий файл, вместо того, чтобы нажимать Next пару раз.

Однако, в целом, мастер ADS оказался быстрее аналогичного в SSMS.
PowerShell
Посреди попыток заставить мастеров работать, я пожаловался в Twitter. Несколько человек предложили PowerShell, а другие заметили, что dba tools имеет команду Import-DbaCsv. Я решил попробовать. Моя первая попытка была самой простой. Я использовал эту команду:
Import-DbaCsv -Path «E:\Documents\Taxes\2020\Venmo statements\venmo_statement (6).csv» -SqlInstance Aristotle -Database HerdofTwo -Table «VenmoData»
Я получил ошибку, т.к. таблица не существовала.
Затем я добавил опцию -AutoCreateTable, и мой первый файл импортировался. Использовались столбцы nvarchar(max), но это было правильно. Я смог использовать быстрый цикл для импорта всех моих файлов. Это был простейший метод, т.к. существующая таблица не вызывала никаких проблем. Когда я импортировал первый файл, я убрал опцию и все последующие импортируемые файлы отправлялись в эту таблицу.
Я не попробовал команду Import-Csv, поскольку тогда мне нужно было бы самому проделать некоторые манипуляции, чтобы получить результаты в SQL Server.
Выводы
Мне нужно было импортировать несколько простых файлов для моей жены. В данном случае я имел 12 файлов в одном формате и 1 — в другом. Все что я хотел, это загрузить их в пару таблиц, а затем снова экспортировать. Я был удивлен, что инструменты SSMS были неуклюжи и громоздки в использовании. PowerShell, или более конкретно dba tools, оказалось наилучшим способом выполнить эту задачу, повторяемую 13 раз. После того, как я сделал это, у меня появился небольшой скрипт, который я могу использовать в будущем для импорта других файлов, если это потребуется.
Это была только часть моей работы, т.к. я должен был удалить некоторые строки (пункты начального/конечного баланса), а затем вытащить общие поля в таблицу, откуда я могу экспортировать их. Однако вместо предполагаемых 5 минут, задача превратилась в 20-30 минутное путешествие, главным образом, по причине изучения того, насколько плохо инструменты Microsoft обрабатывают простой файл csv. Я надеялся, что простой импорт в новую таблицу со всеми столбцами строкового типа окажется простым вариантом. Я также ожидал возможности повторения моего импорта в существующую таблицу.
Я знаю, что ETL — это сложная тема, и CSV могут быть довольно раздражающими, но в данном случае я думаю, что программное обеспечение построено и разработано не так хорошо, как могло бы быть.
Мастер импорта неструктурированных файлов в SQL
Мастер импорта неструктурированных файлов позволяет легко скопировать данные из неструктурированного файла (CSV-файл, TXT-файл) в новую таблицу в вашей базе данных. Мастер импорта неструктурированных файлов поддерживает файлы форматирования с разделителями-запятыми и с фиксированной шириной. В этом обзоре описано, почему нужно использовать этот мастер, как его найти, а также приведен простой пример.
Почему нужно использовать этот мастер?
Этот мастер создан на основе интеллектуальной платформы Program Synthesis using Examples (PROSE) и позволяет улучшить текущий процесс импорта. Для пользователей, которые не обладают глубокими знаниями в предметной области, импорт данных часто представляет собой трудную и утомительную задачу, чреватую ошибками. При использовании мастера достаточно указать входной файл и уникальное имя таблицы, и платформа PROSE сделает все остальное.
PROSE анализирует шаблоны данных во входном файле и определяет имена столбцов, типы, разделители и т. д. Платформа запоминает структуру файла и выполняет все действия по обработке данных.
Предварительные требования
Эта функция доступна в SQL Server Management Studio (SSMS) 17.3 и более поздних версий. Убедитесь, что вы используете последнюю версию. Ее можно найти здесь.
Приступая к работе
Чтобы открыть мастер импорта неструктурированных файлов, выполните следующие действия.
- Откройте SQL Server Management Studio.
- Подключитесь к экземпляру ядра СУБД SQL Server или к узлу localhost.
- Разверните узел Базы данных, щелкните правой кнопкой мыши базу данных («test» в примере ниже), выберите Задачи, а затем — Импорт неструктурированного файла над пунктом меню «Импорт данных».

Дополнительные сведения о различных функциях мастера см. в следующем руководстве:
Руководство
При выполнении действий, описанных в этом учебнике, вы можете использовать свой собственный неструктурированный файл. Если у вас нет собственного файла, можете скопировать следующий CSV-файл из Excel. Назовите этот файл example.csv и сохраните его в формате CSV в удобном месте, например на рабочем столе.

- Мастер доступа
- Указание входного файла
- Предварительный просмотр данных
- Изменение столбцов
- Сводка
- Результаты
Шаг 1. Открытие мастера и страница «Приступая к работе»
Откройте мастер, как описано здесь.
Первая страница мастера — это страница приветствия. Если вы не хотите, чтобы она открывалась снова, установите флажок Больше не показывать это окно.

Шаг 2. Указание входного файла
Нажмите кнопку «Обзор», чтобы выбрать входной файл. По умолчанию мастер ищет файлы в форматах CSV и TXT. PROSE определит, является ли это файлом с разделителями-запятыми или с фиксированной шириной, независимо от расширения файла.
Имя новой таблицы должно быть уникальным. В противном случае вы не сможете продолжить работу мастера.

Шаг 3. Предварительный просмотр данных
Мастер открывает окно предварительного просмотра для первых 50 строк данных. Если в данных есть ошибки, нажмите кнопку «Отмена». В противном случае перейдите к следующей странице.

Шаг 4. Изменение столбцов
Мастер определяет, что он считает правильными именами столбцов, типами данных и т. д. Здесь можно изменить поля, если они неверны (например, тип данных должен быть плавающей, а не int).
Столбцы, в которых обнаруживаются пустые значения, будут иметь флажок «Разрешить значения NULL». Однако если в столбце предполагается наличие значений NULL, а флажок «Разрешить значения NULL» не установлен, здесь можно обновить определение таблицы, чтобы разрешить значения NULL в одном или во всех столбцах.
Когда все будет готово, нажмите кнопку «Далее».

Шаг 5. Сводка
Это страница сводки, на которой отображается текущая конфигурация. Если возникли проблемы, можно вернуться к предыдущим страницам мастера. В противном случае нажмите кнопку «Готово», чтобы начать импорт.

Шаг 6. Результаты
На этой странице показан результат импорта. Если на ней есть зеленая галочка, импорт завершен успешно. В противном случае проверьте конфигурацию и входной файл на наличие ошибок.

Устранение неполадок
Мастер импорта неструктурированных файлов определяет типы данных на основе первых 200 строк. В сценариях, где данные, расположенные в неструктурированном файле, не соответствуют автоматически обнаруженным типам данных, во время импорта возникнет ошибка. Сообщение об ошибке будет выглядеть следующим образом:
Error inserting data into table. (Microsoft.SqlServer.Prose.Import) The given value of type String from the data source cannot be converted to type nvarchar of the specified target column. (System.Data) String or binary data would be truncated. (System.Data)
Тактики устранения этой ошибки:
- Расширение размера(ов) типа данных на шаге Изменение столбцов, например длины столбца nvarchar, может компенсировать отклонения данных от остальной части неструктурированного файла.
- Включение отчета об ошибках на шаге Изменение столбцов, особенно по меньшему числу, покажет, какие строки в неструктурированном файле содержат данные, не соответствующие выбранным типам данных. Например, в неструктурированном файле, где во второй строке появляется ошибка, при выполнении импорта с отчетом об ошибках с диапазоном 1 появляется конкретное сообщение об ошибке. Проверка файла непосредственно в расположении может обеспечить более точные изменения типов данных на основе данных в определенных строках.

Error inserting data into table occured while inserting rows 1 - 2. (Microsoft.SqlServer.Prose.Import) The given value of type String from the data source cannot be converted to type float of the specified target column. (System.Data) Failed to convert parameter value from a String to a Double. (System.Data)
В настоящее время импортер использует кодировку на основе активной кодовой страницы системы. На большинстве компьютеров по умолчанию используется ANSI.
Подробнее
Дополнительные сведения о мастере.
- Дополнительные сведения об импорте из других источников. Если вы хотите импортировать несколько неструктурированных файлов, обратитесь к разделу Мастер импорта и экспорта SQL Server.
- Дополнительные сведения о подключении к неструктурированным файлам в качестве источников. Если вам необходимы дополнительные сведения о подключении к неструктурированным файлам в качестве источников, обратитесь к разделу Подключение к источнику данных неструктурированного файла.
- Дополнительные сведения о PROSE. Если вам необходимы сведения об интеллектуальной платформе, которая используется этим мастером, обратитесь к разделу Пакет SDK для PROSE.
Загрузка данных из CSV-файла в Базу данных SQL Azure или Управляемый экземпляр SQL (неструктурированные файлы)
Для импорта данных из CSV-файла в Базу данных SQL Azure или Управляемый экземпляр SQL Azure можно использовать программу командной строки bcp.
Подготовка к работе
Предварительные требования
Для выполнения задач из этой статьи необходимо следующее:
- база данных в Базе данных SQL Azure;
- установленная служебная программа командной строки bcp;
- установленная служебная программа командной строки sqlcmd.
Вы можете скачать служебные программы bcp и sqlcmd в документации sqlcmd Майкрософт.
Данные в формате ASCII или UTF-16
Чтобы выполнить действия, описанные в этом руководстве, необходимо использовать данные в формате ASCII или UTF-16, так как bcp не поддерживает кодировку UTF-8.
1. Создание целевой таблицы
Определите таблицу в базе данных SQL как целевую таблицу. Столбцы в таблице должны соответствовать данным в каждой строке файла данных.
Чтобы создать таблицу, откройте окно командной строки и используйте sqlcmd.exe для выполнения следующей команды:
sqlcmd.exe -S -d -U -P -I -Q " CREATE TABLE DimDate2 ( DateId INT NOT NULL, CalendarQuarter TINYINT NOT NULL, FiscalQuarter TINYINT NOT NULL ) ; "
2. Создание файла исходных данных
Откройте блокнот и скопируйте следующие строки данных в новый текстовый файл, а затем сохраните этот файл в локальный временный каталог (C:\Temp\DimDate2.txt). Эти данные имеют формат ASCII.
20150301,1,3 20150501,2,4 20151001,4,2 20150201,1,3 20151201,4,2 20150801,3,1 20150601,2,4 20151101,4,2 20150401,2,4 20150701,3,1 20150901,3,1 20150101,1,3
Чтобы экспортировать данные из базы данных SQL Server, откройте окно командной строки и выполните команду ниже (необязательно). Замените значения TableName, ServerName, DatabaseName, Username и Password на собственные.
bcp out C:\Temp\DimDate2_export.txt -S -d -U -P -q -c -t ","
3. Загрузка данных
Чтобы загрузить данные, откройте окно командной строки и выполните следующую команду, подставив собственные значения имени сервера, базы данных, пользователя и пароль.
bcp DimDate2 in C:\Temp\DimDate2.txt -S -d -U -P -q -c -t ","
Используйте команду ниже, чтобы убедиться, что данные загружены правильно.
sqlcmd.exe -S -d -U -P -I -Q "SELECT * FROM DimDate2 ORDER BY 1;"
Результат должен выглядеть следующим образом:
| DateId | CalendarQuarter | ФинКвартал |
|---|---|---|
| 20150101 | 1 | 3 |
| 20150201 | 1 | 3 |
| 20150301 | 1 | 3 |
| 20150401 | 2 | 4 |
| 20150501 | 2 | 4 |
| 20150601 | 2 | 4 |
| 20150701 | 3 | 1 |
| 20150801 | 3 | 1 |
| 20150801 | 3 | 1 |
| 20151001 | 4 | 2 |
| 20151101 | 4 | 2 |
| 20151201 | 4 | 2 |
