Sql экспорт в файл

Не подскажите, возможно ли результаты запроса(таблицы, процедуры) экспортировать в файлы(различных форматов), только не руками, а средствами SQL?
Если да, то подскажите, где прочитать про это или подскажите примерный код(аля " select * from table into to "otchet.xls" ")?
Если да, то где об этом почитать?


PEAKTOP © ( 2007-01-05 12:50 ) [1]


_RusLAN © ( 2007-01-05 12:56 ) [2]

может внешние таблицы вам помогут?


Desdechado © ( 2007-01-05 12:56 ) [3]

SQL – это язык работы с данными.
Он не знает ни о каких внешних файлах, тем более о каких-то их форматах типа экселя.
Тебе нужно, ты и пиши. Или пользуй готовые программы.


sniknik © ( 2007-01-05 13:12 ) [4]

> SQL – это язык работы с данными.
> Он не знает ни о каких внешних файлах, тем более о каких-то их форматах типа экселя.
ну это смотря какой sql, каким движком реализован, jet так вполне знает разные внешние файлы, эксел в том числе. т.что можно и sql-лем экспорт делать.
mssql через oledb провайдера (тот же jet) тоже можно.
а вот Firebird не знаю, возможно тоже какоето средство экспорта есть. надо по нему доки читать.


Anatoly Podgoretsky © ( 2007-01-05 13:21 ) [5]

> sniknik (05.01.2007 13:12:04) [4]

> ну это смотря какой sql

Firebird гетерогенные запросы не поддерживает.


Desdechado © ( 2007-01-05 13:31 ) [6]

> ну это смотря какой sql, каким движком реализован,
Это уже не SQL, а его расширения.
В Оракле, например, много системных пакетов для разных целей (и таких в т.ч.). Но это не делает этот функциональный мусор частью языка SQL.
Тем более движок – не язык.


Anatoly Podgoretsky © ( 2007-01-05 13:43 ) [7]

> Desdechado (05.01.2007 13:31:06) [6]

Если движок позволяет делать гетерогенные запросы, то это уже язык.
INSERT INTO . SELECT FROM .
Это типовая SQL конструкция.


Desdechado © ( 2007-01-05 13:51 ) [8]

> INSERT INTO . SELECT FROM .
> Это типовая SQL конструкция.
Но только для таблиц в одной БД, а не в непонятного вида "внешнем файле".


Megabyte © ( 2007-01-05 13:53 ) [9]

В самом IBExpert"е средства экспорта есть, но мне это, естественно, надо программно.
Ладно, сам сделаю, просто интересно было узнать.


Anatoly Podgoretsky © ( 2007-01-05 13:54 ) [10]

> Desdechado (05.01.2007 13:51:08) [8]

Вполне в понятном, типовой OLE DB драйвер для ODBC
Движок должен поддерживать гетерогенные запросы, но это не проблема SQL


carmen © ( 2007-01-05 14:28 ) [11]

Так как в вопросе конкретно указано FireBird 2 то это просто сделать и самим FireBird посредством SQL-запроса.
1. Создать в базе таблицу, которая будет ссылатся на внешний файл. Например:

Create Table External_Table File "name_file"
(
Field01 Char(10),
Field02 Char(128),
.
FieldXX Char(100)
)

2. Для записи в этот файл используем:

insert into external_table
select pole01, pole02, pole03
from необходимая_таблица
where необходимое условие

И все больше ничего придумывать ненадо.

Таким же способом можно и наоборот из внешнего файла вставлять в базу


vlad-mal © ( 2007-01-05 14:55 ) [12]


> В самом IBExpert"е средства экспорта есть, но мне это, естественно,
> надо программно.

IBEScript бросьте возле клиентской программки – вот Вам и будет "программно"


Desdechado © ( 2007-01-05 15:31 ) [13]

carmen © (05.01.07 14:28) [11]
Во-первых, это только на сервере.
Во-вторых, никаких форматов аля " select * from table into to "otchet.xls" не поддерживается.
В-третьих, такая выгрузка работает только с CHAR-полями, числовые туда идут в нечитаемом виде, блобы вообще не поддерживаются.
В-четвертых, удалить этот файл уже нельзя без DROP TABLE.


Carmen © ( 2007-01-05 20:13 ) [14]

1. то что на сервере проблем не вижу
2. зачем делать экспорт когда незнаеш какие поля надо экспортировать, вообще не select * from table into to "otchet.xls" а так как я привел
3. такая вигрузка работает для любых данных, в том числе и числовых (з блоб полями не пробовал)
4. а чем трудно это запихнуть в процедуру на сервере или на клинте.

а вообще данный кусок (но с необходимыми полями) уменя работеет уже около года, впритом что импорт/экспорт далается как текстовой та и числовой информации десятки раз на день и никаких проблем не было.

а придумывать свой велосипед для простого експорту данных не вижу смысла


Desdechado © ( 2007-01-05 20:40 ) [15]

Carmen © (05.01.07 20:13) [14]
> 1. то что на сервере проблем не вижу
Ну-ну. Сидят 50 пользователей и каждый дружно гадит на сервер в какие-то файлы. Как он их оттуда забирать будет? Как он отличит свои от чужих, если эти юзеры побывали в одинаковых режимах, но с разными настройками. Экспорт явно для каких-нибудь отчетов нужен.

Читайте также:  Батареи не прогреваются полностью

> 2. зачем делать экспорт когда незнаеш какие поля надо экспортировать
Невнимательность твоя, однако. Я показал запрос выгрузки в эксель, который хотел автор.

> 3. такая вигрузка работает для любых данных, в том числе и числовых
Числовых в текстовом формате (я не зря сказал о CHAR). И прочих тоже только в текстовом формате. Можно и в нетекстовом, но тогда это будет бинарник, который ничем нормально (без вывертов) не прочитаешь.

> 4. а чем трудно это запихнуть в процедуру на сервере или на клинте.
Еще одна глупость. Постоянно создавать и убивать таблицы очень чревато для сервера. А делать это из ХП – вообще свинство. В FB, по крайней мере.

> а вообще данный кусок (но с необходимыми полями) уменя работеет уже
> около года, впритом что импорт/экспорт далается как текстовой та и
> числовой информации десятки раз на день и никаких проблем не было
У каждого свои задачи. Но такие вещи, имхо, больше на импорт ориентированы, причем не многократный, а одноразовый. Потому как это не пользовательская задача, а админская.


Carmen © ( 2007-01-05 21:06 ) [16]


> > 2. зачем делать экспорт когда незнаеш какие поля надо
> экспортировать
> Невнимательность твоя, однако. Я показал запрос выгрузки
> в эксель, который хотел автор.

такой файл можна без проблем открыть в екселе и все будет по колонках.

а последнее изречение правильное, у каждого свои задачи.


try ( 2007-01-05 21:26 ) [17]


> 4. а чем трудно это запихнуть в процедуру на сервере

Разве DDL команды выполнимы из процедур на сервере.


rar © ( 2007-01-05 21:54 ) [18]

можно используя ADOConnection

ADOConnection1.Execute ("SELECT * INTO [Customer.htm] IN "" +
ExtractFilePath (Application.ExeName) + "" "HTML Export;" FROM CUSTOMER");

ADOConnection1.Execute ("SELECT * INTO Customer IN "" +
ExtractFilePath (Application.ExeName) + "dbdemos.xls" "Excel 8.0;" FROM CUSTOMER");


try ( 2007-01-05 21:57 ) [19]


> rar © (05.01.07 21:54) [18]
> можно используя ADOConnection

Т.е. у тебя получается.


sniknik © ( 2007-01-05 22:36 ) [20]

> Т.е. у тебя получается.
только если используется jet, его синтаксис.

у парня просто "легкая" дезориентация в пространстве форума. ;о))


try ( 2007-01-05 23:27 ) [21]


> sniknik © (05.01.07 22:36) [20]
> только если используется jet, его синтаксис.

А как jet состыкуется с FB?


sniknik © ( 2007-01-06 00:55 ) [22]

> А как jet состыкуется с FB?
это спрашивай автора [18] поста, это он приводит запросы из jet как ответ в ветке с Firebird.

или это "прямой" вопрос?
тогда легко. из коннекта к access можно аналогично приведенным можно сделать запрос с указанием isam-а odbc и в нем указывая dsn настроенный на Firebird.
только это не ответ на основной вопрос ветки, там то как раз нужно наоборот, чтобы Firebird "вязался" с другими движками/или имел встроенный экспорт в разные форматы (чего как было сказано нет).

у меня есть два SQL-сервера (обе версии 2005).

Я хочу перенести несколько таблиц из одной в другую.

на исходном сервере я щелкнул правой кнопкой мыши по базе данных, выбрал Tasks/Generate scripts . Проблема в том, что под Table/View options нет .

тогда я использовал Script Table As/Create script для создания файлов SQL для создания таблиц на моем целевом сервере. Но мне все еще нужны все данные.

затем я попытался с помощью:

, но я получаю ошибку :

11 ответов

создайте таблицу на целевом сервере, используя сценарии из Script Table As / Create Script шаг

на целевом сервере вы можете затем выпустить инструкцию T-SQL:

Это должно работать просто отлично.

просто чтобы показать еще один вариант (для SQL Server 2008 и выше):

  1. щелкните правой кнопкой мыши на базе данных – > выберите "задачи" – > выберите "Создать Скрипты"
  2. выбрать конкретные объекты базы данных, которые вы хотите скопировать. Скажем, один или несколько столов. Нажмите Кнопку Далее
  3. нажмите Дополнительно и прокрутите вниз до "типы данных в сценарий" и выберите "схема и данные". Нажмите кнопку OK
  4. выберите, где сохранить сгенерированный скрипт и нажмите кнопку Далее
Читайте также:  Меня плохо слышно по телефону iphone 7

в задачах/генерация скриптов есть опция таблицы скриптов! Я также пропустил его в начале! Но вы можете генерировать скрипты вставки там (очень хорошая функция, но в очень неинтуитивном месте).

когда вы доберетесь до шага "установить параметры сценариев" перейдите на вкладку "Дополнительно".

действия, описанные здесь (картинки можно понять, но я там пишу по-латышски).

попробуйте использовать SQL Server мастер импорта и экспорта (в разделе задачи – > экспорт данных).

Он предлагает создать таблицы в целевой базе данных. В то время как, как вы видели, мастер сценариев может создавать только структуру таблицы.

Если таблицы уже созданы с помощью скриптов, то есть другой способ скопировать данные – с помощью команды BCP скопировать все данные с исходного сервера на конечный сервер

экспорт данных таблицы в текстовый файл на исходном сервере:

импорт табличных данных из текстового файла на целевом сервере:

вы не можете выбрать исходный/конечный сервер.

Если базы данных находятся на одном сервере можно сделать так:

если столбцы таблицы равны (включая порядок!) тогда вы можете сделать следующее:

Если вы хотите сделать это после резервного копирования / восстановления исходной базы данных. Если вам нужно делать это чаще, я рекомендую вам запустить проект SSIS, где вы определяете исходную базу данных (там вы можете выбрать любое соединение на любом сервере) и создать проект, куда вы перемещаете свои данные. Смотрите дополнительную информацию здесь:http://msdn.microsoft.com/en-us/library/ms169917%28v=sql.105%29.aspx

просто для удовольствия.

так как я не смог создать связанный сервер и так как просто подключение к производственному серверу было недостаточно для использования INSERT INTO Я сделал следующее:

  • создана резервная копия базы данных производственного сервера
  • восстановил базу данных на моем тестовом сервере
  • выполнена вставка в заявления

его бэкдор решение, но так как у меня были проблемы, это сработало для меня.

так как я создали пустые таблицы, используя SCRIPT TABLE AS / CREATE для передачи всех ключей и индексов я не мог использовать SELECT INTO . SELECT INTO работает только в том случае, если таблицы не существуют в месте назначения, но не копируют ключи и индексы, поэтому вам нужно сделать это вручную. Недостаток использования INSERT INTO оператор заключается в том, что вы должны вручную предоставить все имена столбцов, а также это может дать вам некоторые проблемы, если некоторые ограничения внешнего ключа терпят неудачу.

спасибо всем anwsers, есть некоторые большие решения, но я решил принять marc_s anwser.

Это можно сделать через " импорт / экспорт данных. "в среде SQL Server Management Studio

для копирования данных из источника в назначение:

Это несколько обойти решение, но он работал для меня, я надеюсь, что это работает для этой проблемы и для других:

вы можете запустить запрос select SQL в таблице, которую хотите экспортировать ,и сохранить результат как.XLS в Вас диск.

Теперь создайте таблицу, в которую вы хотите добавить данные со всеми столбцами и индексами. Это можно легко сделать, щелкнув правой кнопкой мыши по фактической таблице и выбрав опцию Create to script.

теперь вы можете щелкнуть правой кнопкой на БД, куда вы хотите добавить таблицу и выберите задачи>импорт .

откроется мастер импорта экспорта и выберите Далее.Выберите Microsoft Excel как источник данных, а затем выберите .файл xls, сохраненный ранее.

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

Примечание: Если есть какое-либо поле на основе идентификаторов, в таблице назначения вы можете удалить свойство identity, как это будут данные также вставляется . Поэтому, если у вас есть это как свойство Identity, только тогда это приведет к ошибке процесса импорта.

Теперь нажмите next и нажмите finish, и он покажет вам, сколько записей импортируется и возвращает успех, если ошибок не происходит.

еще один вариант, если он у вас есть: c# .сеть. В частности, Microsoft.От SQLServer.Управление.Пространство имен Smo.

Я использую код, подобный следующему в компоненте скрипта одного из моих пакетов служб SSIS.

Я думаю, что мне пришлось явно искать и добавлять Microsoft.От SQLServer.Библиотека Smo к ссылкам. Но помимо этого, у меня все получается.

обновление: пространства имен и библиотеки были больше сложнее, чем я помнил.

для библиотек добавьте ссылки на:

  • Microsoft.От SQLServer.модель SMO.dll файлы
  • Microsoft.От SQLServer.SmoExtended.dll файлы
  • Microsoft.От SQLServer.ConnectionInfo.dll файлы
  • Microsoft.От SQLServer.Управление.пакет SDK.Sfc.dll

для пространств имен, добавить:

  • Microsoft.От SQLServer.Управление.Common
  • Microsoft.От SQLServer.Управление.Smo

Задача
Вы хотите экспортировать результаты запроса из MySQL в файл или в другую программу.

Решение
Воспользуйтесь предложением SELECT . INTO OUTFILE или перенаправьте вывод программы mysql.

Читайте также:  Алфавит племени барамба состоит из 4 букв

Обсуждение
В MySQL можно использовать предложение SELECT . INTO OUTFILE для вывода результатов запроса непосредственно в файл на хосте сервера. Если же вы хотите получить результат на клиентском хосте, то есть другая возможность:

перенаправить вывод программы mysql. У каждого из этих методов есть свои сильные и слабые стороны, поэтому вам следует познакомиться с обоими и использовать тот, который больше подходит в конкретной ситуации.

Экспорт с помощью SELECT . INTO OUTFILE

Здесь используется обычное предложение SELECT, к которому добавлена конструкция INTO OUTFILE имя_файла. Формат вывода по умолчанию тот же, что и для LOAD DATA, так что следующее предложение экспортирует таблицу passwd в файл /tmp/passwd.txt с символами TAB и LF в качестве разделителей полей и строк:

mysql> SELECT * FROM passwd INTO OUTFILE ‘/tmp/passwd.txt’;

Для изменения формата вывода вы можете использовать опции, аналогичные тем, которые использовались в LOAD DATA для определения кавычек и разделителей столбцов и строк.

Чтобы экспортировать таблицу passwd в формате CSV с разделением строк символами CRLF, используйте такое предложение:

mysql> SELECT * FROM passwd INTO OUTFILE ‘/tmp/passwd.txt’
-> FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘"’
-> LINES TERMINATED BY ‘
‘;

Предложение SELECT . INTO OUTFILE обладает следующими свойствами:

• Выходной файл создается непосредственно сервером MySQL, поэтому имя файла должно соответствовать его желаемому расположению на серверном хосте. Не существует локальной версии этого предложения, аналогичной LOAD DATA LOCAL.

• Для выполнения предложения SELECT . INTO необходима привилегия FILE в MySQL.

• Нельзя использовать уже существующий файл. Это предохраняет от потери файлов, возможно, содержащих важную информацию.

• Вам потребуется учетная запись на сервере или другой способ для получения файла с этого хоста. Иначе предложение SELECT . INTO OUTFILE окажется для вас бесполезным.

• В UNIX файл создается доступным для чтения всем, а его владельцем является сервер MySQL. Это означает, что, хотя вы и сможете прочитать его, у вас может не оказаться прав на его удаление.

Экспорт с помощью клиента mysql
Вследствие того, что предложение SELECT .

INTO OUTFILE записывает файл на хост сервера, вы не сможете использовать его, если у вашей учетной записи в MySQL нет привилегии FILE. Для экспорта данных в локальный файлтребуется другой подход. Если все, что вам нужно – это вывод данных, разделенных символами табуляции, можно воспользоваться «экспортом для бедных», выполняя предложение SELECT из программы mysql с перенаправленным в файл выводом. При таком способе вам не потребуется привилегия FILE для вывода результата запроса в файл. Вот пример, в котором экспортируются столбцы регистрационного имени и командного интерпретатора из ранее созданной таблицы passwd:

% mysql -e "SELECT account, shell FROM passwd" -N cookbook > shells.txt

Опция -e определяет выполняемый запрос, а -N сообщает MySQL, что не надо выводить строку заголовков столбцов, обычно предваряющую вывод.

Вторая опция была добавлена в MySQL 3.22.20; если у вас более старая версия, вы можете получить тот же результат, указав вместо нее опцию -ss, заставляющую mysql помолчать»:

% mysql -e "SELECT account, shell FROM passwd" -ss cookbook > shells.txt

Имейте в виду, что значения NULL выводятся в виде строки «NULL».

Возможно, потребуется выполнить некоторые преобразования в зависимости от того, как вы планируете использовать результат.

Перенаправив вывод результатов запроса в фильтр, заменяющий символы табуляции на другие разделители, можно получить выходные данные в формате, отличном от принятого по умолчанию. Например, чтобы использовать в качестве разделителя решетку, преобразуем символы TAB в # (строка TAB указывает то место в команде, где следует нажать клавишу табуляции):

% mysql -N -e "здесь ваш запрос" имя_БД | sed -e "s/TAB/#/g" > файл_вывода Для этих целей можно также использовать команду tr, хотя ее синтаксис может отличаться в разных реализациях. В системах Mac OS X или RedHat Linux команда выглядит так:

% mysql -N -e "здесь ваш запрос" имя_БД | tr " " "#" > файл_вывода

В приведенных командах mysql используются опции -N или -ss для удаления из выходных данных заголовков столбцов. В некоторых случаях эти заголовки могут пригодиться. (Например, они могут понадобиться при последующем импорте.) Тогда исключите из команды опцию их отмены. В этом смысле экспорт результатов запроса посредством mysql более гибок, чем с помощью предложения SELECT . INTO OUTFILE, так как в последнем отсутствует возможность вывода заголовков столбцов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock detector