Сохранение результатов запроса в текстовом файле (Тема для обсуждения)

Александр Гладченко
Дата: 08.02.2001 14:16:32

По материалам статьи Brian Knight на SWYNK.COM "Piping Queries to a Text File"

Брайен пишет, что часто возникает необходимость сохранить результаты исполнения запроса в текстовом файле. Особенно это удобно, когда время исполнения запроса весьма велико или доступные ресурсы не позволяют запускать запрос в рабочие часы, и Вы решите запустить исполнение запроса ночью, а результаты посмотреть утром. Вы можете создавать задание, содержащее CMDEXEC, которое выполнит необходимые команды и выведет результаты запроса c:\inputquery.txt в отдельный файл.

\mssql7\binn\osql -Usa -Ppassword -ic:\inputquery.txt -oc:\outputdir\output.txt

Если Вы не хотите открыто записывать пароль в ваше задание, можно использовать ключ "E" для организации доверительного подключения.
Также, можно воспользоваться расширенной хранимой процедурой XP_CMDSHELL:

master..xp_cmdshell 'osql -Usa -Pmisty -Q"select * from products" -dNorthwind -oc:\output.txt' '

Параметр "Q" задаёт строку запроса.
В конце запроса Вы можете добавить дополнительный параметр NO_OUTPUT, для блокирования любого вывода клиенту.

master..xp_cmdshell 'osql -Usa -Pmisty -q"select * from products" -dNorthwind -oc:\output.txt', no_output

Есть и другие методы конвейерной пересылки результатов исполнения запроса в текстовый файл (например, используя OLE Automation) но они более трудоёмки, чем этот метод.
Константин
Дата: 08.02.2001 20:15:21
Очень часто отчеты нужны не сами по себе, для информации, а для представления куда-то, или для архивного хранения. Значит должны быть шапка, подписи. В общем оформлено должно быть в соответствии с правилами делопроизводства, и в этом случае собственные средства SQL мало пригодны. Разве что с помощью sp_makewebtask можно сделать что-то более или менее подходящие. Конечно, можно потом обработать в текстовом редакторе, но в лом делать то, что должна делать машина. Лично я написал клиента и запускаю его по расписанию. Можно, наверное, использовать Extended Stored Procedures, но мне лень на С писать.