Конвертировать файл вывода SSMS .rpt в.txt/.csv
Я хочу экспортировать мой большой результат запроса SSMS (SQL Server Management Studio) (2,5 млн строк, 9 полей) в виде.csv или через запятую.txt (с заголовками). (MS SQL Server 2005 Management Studio.)
Так что я могу затем читать его построчно в программу VBA (для выполнения определенных вычислений над данными) или выполнять запросы в Excel (например, с помощью Microsoft Query). Расчеты сложны, и я предпочитаю делать это где-то еще, кроме SSMS.
Если я выберу "запросить текстовый результат" в SSMS и небольшой ответ (несколько строк, например, до 200 КБ), я, конечно, могу просто скопировать и вставить в текстовый редактор. Для моего большого ответа здесь я, конечно, мог бы скопировать и вставить примерно 200 000 строк одновременно, 10 раз, в текстовый редактор, такой как Ultra-Edit. (Когда я пробую все 2,5 м за раз, я получаю предупреждение о памяти внутри SSMS.) Но в будущем я бы хотел более элегантное решение.
Для "запроса результата в файл" SSMS всегда записывает в файл.rpt. (Когда вы щелкаете правой кнопкой мыши в окне результатов и выбираете "Сохранить как", выдается ошибка памяти, как и выше.)
-> Так что, похоже, мой единственный вариант - сделать так, чтобы SSMS выводил свой результат в файл, т.е..rpt, а затем преобразовал.rpt в.txt.
Я предполагаю, что.rpt является файлом Crystal Reports? Или нет? У меня нет Crystal Reports на моем ПК, поэтому я не могу использовать это для преобразования файла.
При открытии.rpt в Ultra-Edit выглядит нормально. Однако в Microsoft Query в Excel заголовки не хотят показываться.
Когда я просто читаю и пишу.rpt, используя VBA, размер файла уменьшается вдвое. (От 330 до 180 мг). В Microsoft Query заголовки теперь отображаются (хотя имя первого поля имеет забавный ведущий символ, что случалось со мной раньше в других совершенно других ситуациях). Я, кажется, могу сделать значимые сводные таблицы на нем в Excel.
Однако, когда я открываю этот новый файл в Ultra-Edit, он показывает китайские символы! Могут ли еще где-нибудь быть смешные персонажи?
-> Возможно, где-нибудь доступно бесплатное (и простое / безопасное) приложение-конвертер. Или я должен просто поверить, что этот.txt хорош для чтения в моей программе VBA.
Спасибо
6 ответов
Ну, с помощью друга, я нашел свое решение: Rpt-файлы - это обычные текстовые файлы, созданные в MS SQL Server Management Studio, но с кодировкой Little Endian UCS-2 вместо ANSI.
-> В Ultra-Edit опция "файл, параметры конвертации, Unicode в ASCII" сделала свое дело. Текстовый файл уменьшается с 330 до 180 мегабайт, Microsoft Query в Excel теперь может видеть столбцы, а VBA может читать строки файла и процесса *.
Ps Другой альтернативой было бы использовать MS Access (который может обрабатывать большие результаты) и подключаться с ODBC к базе данных. Однако тогда мне пришлось бы использовать Jet-SQL, который имеет меньше команд, чем T-SQL MS SQL Server Management Studio. Очевидно, можно создать новый файл как.adp в MS Access 2007, а затем использовать T-SQL для серверной части SQL Server. Но в MS Access 2010 (на моем ПК) эта опция больше не существует.
Простой способ: в SQL Server Management Studio перейдите в меню "Запрос" и выберите "Параметры запроса..."> Результаты> Текст> Измените "Формат вывода" на "Запятая с разделителями". Теперь запустите ваш запрос для экспорта в файл, и после этого переименуйте файл из .rpt
в .csv
и он откроется в Excel:).
Вот мое решение.
- Используйте Microsoft SQL Server Management Studio
- Сконфигурируйте его для сохранения файлов.rpt с разделителями табуляции: Перейдите в "Запрос"> "Параметры запроса"> "Результаты"> "Текст"> "Формат вывода" и выберите "Разделитель табуляции" (нажмите ОК)
- Теперь, когда вы создаете отчет, используйте меню "Сохранить с кодировкой..." и выберите "Юникод" (по умолчанию это "UTF8")
- Теперь вы можете открыть файл в Excel, и все будет в столбцах, без проблем с экранированием и посторонними символами (обратите внимание, что файл может быть больше из-за кодировки Юникод).
Вы можете использовать BCP
Откройте командную строку и введите:
SET Q="select * from user1.dbo.table1"
BCP.EXE %Q% queryout query.out -S ServerName -T -c -t
- Ты можешь использовать
-U -P
(вместо-T
) для проверки подлинности SQL. В вашем приложении есть проблема с UNICODE. Вы можете заставить кодовую страницу, используя
-C {code page}
, Если есть сомнения, попробуйте 850.-t
заставит tab как разделитель полей, вы можете изменить его на запятую-t,
Приятно то, что вы можете вызывать это прямо из команды оболочки VBA.
Это рекомендуемый способ, как я вижу, вы можете сделать это.
Мой источник (ответ от DavidAir)
Выберите "результаты в сетку", затем щелкните правой кнопкой мыши на сетке и выберите "Сохранить результаты как...". Это сохранит CSV.
На самом деле, есть проблема с тем, что если некоторые значения содержат запятые - результирующий CSV не экранируется должным образом. Файл RPT на самом деле довольно приятный, так как содержит столбцы фиксированной ширины. Если у вас есть Excel, то относительно простым способом преобразования результата в CSV является открытие файла RPT в Excel. Это вызовет мастер импорта текста, и Excel будет довольно хорошо угадывать столбцы. Пройдите через мастера и сохраните результаты как CSV.
Я рекомендую использовать "Мастер импорта и экспорта SQL Server" по нескольким причинам:
- Выходной файл не будет иметь сообщения о состоянии внизу, как у файла.rpt (т. Е. "(Затронуто 100 строк)"), что может испортить импорт данных
- Возможность задания пользовательских разделителей строк и столбцов длиной более 1 символа.
- Возможность указать настраиваемое сопоставление источника и назначения (т. Е. Столбец FirstName может быть сопоставлен с first_name в CSV)
- Возможность прямого переноса в любую другую базу данных, доступную с машины SSMS.
- Возможность явно выбрать кодировку вашего файла и локаль
Доступ к нему можно получить, щелкнув правой кнопкой мыши вашу базу данных в студии управления (вы должны щелкнуть правой кнопкой мыши базу данных, а не таблицу) и выбрав Задачи> Экспорт данных.
Когда вас спросят об источнике данных, вы можете выбрать "Собственный клиент SQL Server", а когда вас попросят выбрать место назначения, вы можете выбрать "Назначение плоских файлов".
Затем вас попросят указать таблицу или запрос для использования.
Вы можете найти больше информации об инструменте здесь:
Сначала получите ваши данные в файле.rpt, используя любой из вышеперечисленных методов.
По умолчанию.rpt с фиксированным пространством столбца. (262MB)
Запятая с Unicode. (52MB) - я использовал это.
Измените расширение файла на.csv.
Откройте / импортируйте его в Excel и проверьте данные. Тип файла - "Текстовый Юникод".
Сохраните его как CSV (Comma Delimited), который уменьшил размер до 25 МБ.
В моем случае я выполняю запрос в SSMS (до этого нажмите CTRL+SHIFT+F), в результате откройте окно, чтобы сохранить его как файл rpt, я не смог его прочитать (на моем компьютере не установлена Crystal Report)...в следующий раз, когда я запустил запрос, я сохранил его как (все файлы) с расширением *.txt, и это все, что я смог прочитать как текстовый файл.