Преобразование выходного файла 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 тыс.), я мог бы, конечно, просто скопировать и вставить в текстовый редактор. Для моего большого ответа здесь я мог бы, конечно, скопировать и вставить 200k или около того строк за раз, 10 раз, в текстовый редактор, такой как Ultra-Edit. (Когда я пробую все 2.5m сразу, я получаю предупреждение о памяти внутри SSMS.) Но для будущего Id как более элегантное решение.
Для результата запроса к файлу SSMS всегда записывает в .rpt файл. (Когда вы щелкните правой кнопкой мыши в окне результатов и выберите "Сохранить как", он дает ошибку памяти, как указано выше.)
- > Таким образом, мой единственный вариант заключается в том, чтобы SSMS выводил свой результат в файл i.e.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.
Спасибо
Ответы
Ответ 1
Хорошо с помощью друга я нашел свое решение: Rpt файлы - это текстовые файлы, созданные в MS SQL Server Management Studio, но с кодировкой UCS-2 Little Endian вместо ANSI.
- > В Ультра-Редактирование файла опции, варианты преобразования, Юникод в ASCII сделал трюк. Текстовый файл сокращается с 330 до 180 мегабайт, Microsoft Query в Excel теперь может видеть столбцы, а VBA может читать файлы и обрабатывать строки *.
P.s. Другой альтернативой было бы использовать MS Access (который может обрабатывать большие результаты) и подключаться к ODBC к базе данных. Однако тогда мне придется использовать Jet-SQL, который имеет меньше команд, чем T-SQL MS SQL Server Management Studio. По-видимому, можно создать новый файл как .adp в MS Access 2007, а затем использовать T-SQL для задней части SQL Server. Но в MS Access 2010 (на моем ПК) этот вариант, похоже, больше не существует.
Ответ 2
Простой способ: в SQL Server Management Studio перейдите в меню "Запрос" и выберите "Параметры запроса…"> Результаты> Текст> Измените "Формат вывода" на "Запятая с разделителями". Теперь запустите ваш запрос для экспорта в файл, и после этого переименуйте файл из .rpt
в .csv
и он откроется в Excel :).
Ответ 3
Вот мое решение.
- Использование Microsoft SQL Server Management Studio
- Сконфигурируйте его для сохранения файлов с разделителями с разделителями в разделителе. Перейти к Запрос ' > ' Параметры запроса ' > ' Результаты ' > ' Текст ' > ' Формат вывода 'и выберите " Разметка с табуляцией" (нажмите OK)
![введите описание изображения здесь]()
- Теперь, когда вы создаете отчет, используйте меню Сохранить с кодировкой... 'и выберите " Юникод" (по умолчанию это "UTF8", )
![введите описание изображения здесь]()
- Теперь вы можете открыть файл с помощью Excel, и все будет в столбцах, без проблем с экранированием или посторонними символами (обратите внимание, что файл может быть больше из-за кодировки Unicode).
Ответ 4
Вы можете использовать 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
будет использовать табуляцию как разделитель полей, вы можете изменить его на запятую -T,
Приятно то, что вы можете вызывать это прямо из команды оболочки VBA.
Ответ 5
Это рекомендуемый способ, я вижу, вы можете это сделать.
Мой источник (Ответ от DavidAir)
Выберите "результаты в сетку", затем щелкните правой кнопкой мыши по сетке и выберите "Сохранить результаты как...". Это сохранит CSV.
На самом деле существует проблема с тем, что если некоторые значения содержат запятые, результирующий CSV не будет экранирован. Файл RPT на самом деле довольно приятный, поскольку он содержит столбцы фиксированной ширины. Если у вас есть Excel, относительно простой способ преобразования результата в CSV - открыть файл RPT в Excel. Это вызовет мастер импорта текста, и Excel выполнит довольно хорошую работу по угадыванию столбцов. Пройдите через мастер, а затем сохраните результаты как CSV.
Ответ 6
В моем случае я выполняю запрос в SSMS (перед этим нажмите CTRL + SHIFT + F), в результате откройте окно, чтобы сохранить его как файл rpt, я не смог его прочитать (на моем компьютере не установлена Crystal Report)...в следующий раз, когда я запустил запрос, я сохранил его как (все файлы) с расширением *.txt, и вот, я смог прочитать его как текстовый файл.
Ответ 7
Сначала получите ваши данные в файле .rpt, используя любой из вышеперечисленных методов.
По умолчанию .rpt с фиксированным пространством столбца. (262MB)
Запятая с Unicode. (52MB) - я использовал это.
Измените расширение файла на .csv.
Откройте/импортируйте его в Excel и проверьте данные. Тип файла - "Текстовый Юникод".
Сохраните его как CSV (Comma Delimited), который уменьшил размер до 25 МБ.
Ответ 8
Я рекомендую использовать "Мастер импорта и экспорта SQL Server" по нескольким причинам:
- Выходной файл не будет иметь сообщения о состоянии внизу, как у файла .rpt (т.е. "(Затронуто 100 строк)"), что может испортить импорт данных
- Возможность задания пользовательских разделителей строк и столбцов длиной более 1 символа.
- Возможность указать настраиваемое сопоставление источника и назначения (т.е. Столбец FirstName может быть сопоставлен с first_name в CSV)
- Возможность прямого переноса в любую другую базу данных, доступную с машины SSMS.
- Возможность явно выбрать кодировку вашего файла и локаль
Доступ к нему можно получить, щелкнув правой кнопкой мыши вашу базу данных в студии управления (вы должны щелкнуть правой кнопкой мыши базу данных, а не таблицу) и выбрав Задачи> Экспорт данных.
![Selecting the data export tool from the SSMS object explorer]()
Когда вас спросят об источнике данных, вы можете выбрать "Собственный клиент SQL Server", а когда вас попросят выбрать место назначения, вы можете выбрать "Назначение плоских файлов".
Затем вас попросят указать таблицу или запрос для использования.
Вы можете найти больше информации об инструменте здесь:
https://docs.microsoft.com/en-us/sql/integration-services/import-export-data/start-the-sql-server-import-and-export-wizard?view=sql-server-2017