Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
SerRock Member Откуда: Сообщений: 135 |
Уважаемые коллеги, вот есть задача - сохранить данные в xml файле и отправить его по почте ... по описанному способу см. статью glory https://www.sql.ru/faq/faq_topic.aspx?fid=131 все пишется ок ... но! как бы написать все тоже, но в одной процедуре селектом ..? типа: declare @cmd varchar(150) declare @result int set @cmd = 'BCP "SELECT [idCompany],[nameCompany],[Items] FROM [dbo].[Companies] FOR XML AUTO" queryout \\10.0.7.4\ErrIU\a123.xml -w -C1251 -r -T' EXEC @result = master..xp_cmdshell @cmd вот так не работает ... не понимаю, можно ли exec как то прикрутить ... или как-нибудь без него ..? |
5 авг 13, 14:23 [14664086] Ответить | Цитировать Сообщить модератору |
pkarklin Member Откуда: Москва (Муром) Сообщений: 74925 |
http://msdn.microsoft.com/ru-ru/library/ms190307.aspx в части параметров @query и @attach_query_result_as_file. |
5 авг 13, 14:34 [14664179] Ответить | Цитировать Сообщить модератору |
SerRock Member Откуда: Сообщений: 135 |
pkarklin, вопрос не в отправке ... вопрос, как сформировать xml файл в одной процедуре ... |
5 авг 13, 15:25 [14664638] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Написать нужный запрос. как показано в приведенной вами же ссылке |
||
5 авг 13, 15:36 [14664764] Ответить | Цитировать Сообщить модератору |
SerRock Member Откуда: Сообщений: 135 |
Glory, Понял, спасибо ... только как то странно, что можно сохранить xml файл на диске одним единственным способом, да и еще вызовом из другой процедуры ... |
6 авг 13, 09:02 [14667368] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Неверно, способов больше, чем один. Например, написать и использовать CLR-модуль.
Тут вообще непонятно, что к чему. Какие "одну процедуру" и "другую процедуру" вы имеете в виду? |
||||
6 авг 13, 09:18 [14667429] Ответить | Цитировать Сообщить модератору |
SerRock Member Откуда: Сообщений: 135 |
Гость333,DECLARE @result int DECLARE @OutputFileName varchar(150) DECLARE @cmd varchar( 150) Set @OutputFileName = 'c:\mysql.xml' Set @cmd = 'BCP "EXEC get_xml" queryout "' + @OutputFileName + '" -C ACP -c -r -T' EXEC @result = master..xp_cmdshell @cmd get_xml - это др. хранимка, в которой "select ... for xml, auto ..." т.е. нужно запускать 'BCP "EXEC get_xml" queryout ... и вызывать из нее другую ... если вместо имени процедуры написать сам select процедуры get_xml, то не работает ... CLR модуль - тоже решение, но придется переделать (правда не много) тех. проц. пользователей, а слушать их нытье хочется меньше всего |
6 авг 13, 11:22 [14668156] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Т.е. сообщение об ошибке - "Не работает" ? |
||
6 авг 13, 11:26 [14668190] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Выполнил сейчас такую команду: exec xp_cmdshell 'BCP "SELECT object_id, name FROM tempdb.sys.objects FOR XML AUTO" queryout D:\2\a123.xml -S (local)\R2 -C ACP -c -r -T' В указанной папке обнаружил искомый файл. Так что, действительно, надо бы показать сообщение об ошибке. |
||
6 авг 13, 11:37 [14668271] Ответить | Цитировать Сообщить модератору |
повторюшка
Guest |
Гость333, а я просто пробую сделать то же самое из MS: exec xp_cmdshell 'BCP "SELECT object_id, name FROM tempdb.sys.objects FOR XML AUTO" queryout c:\a123.xml -C ACP -c -r -T' (сервер локальный, авторизация win) так не создает файл, а выдает 1 колонку "output", куда пишет 13 строк синтаксиса использования BCP. а из cmd выполняется и файл создает. ну и exec xp_cmdshell 'dir c:\'тоже выполняется. что это может означать? |
6 авг 13, 12:29 [14668700] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А перевод строки в тексте комадны вы сами додумали или посоветовал кто ? |
||
6 авг 13, 12:33 [14668738] Ответить | Цитировать Сообщить модератору |
повторюшка
Guest |
Glory, конечно, сами :) заработало, сэнкс |
6 авг 13, 12:35 [14668760] Ответить | Цитировать Сообщить модератору |
SerRock Member Откуда: Сообщений: 135 |
Гость333, Коллеги, большое спасибо, разобрался ... во-первых select должен быть написан только в одну строку, иначе ошибка формата, во-вторых, нельзя в select почему то использовать представления, иначе Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Недопустимое имя объекта "dbo.view_sch_fact_doc". хотя сам select отрабатывает правильно ... т.е. как ни крути, а придется делать с вызовом процедуры, как Glory писал ... |
6 авг 13, 12:36 [14668780] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А вы попробуйте в commandpromt написать команду из нескольких строк разделенных переводом строки.
Если указывать недопустимое имя, то ошибка будет всегда такая |
||||
6 авг 13, 12:39 [14668800] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Проверьте, может, ваш запрос выполняется в БД, в которой нет такого объекта? |
||
6 авг 13, 12:42 [14668832] Ответить | Цитировать Сообщить модератору |
SerRock Member Откуда: Сообщений: 135 |
Гость333, я приложил файл ... (чем описывать ситуацию) ... как бы объект есть, да и сам select дает правильную выборку (ну, как минимум без ошибки) ... может в предложение from для BCP.EXE есть ограничения для представления? P.S. перевод строки отработал (ну, на простенькой тренировочной таблице) ... спасибо К сообщению приложен файл. Размер - 128Kb |
6 авг 13, 14:27 [14669676] Ответить | Цитировать Сообщить модератору |
Гость333 Member Откуда: Сообщений: 3683 |
Замените ваш запрос "SELECT TOP (10) ... FOR XML ..." на "SELECT DB_NAME()", выполните и посмотрите на содержимое файла. |
||
6 авг 13, 14:33 [14669708] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
В какой базе - вот вопрос |
||
6 авг 13, 14:34 [14669716] Ответить | Цитировать Сообщить модератору |
MDB.dbo.view_sch_fact_doc
Guest |
SerRock, так свое MDB надо не во внешний USE, a впереди view вписать: MDB.dbo.view_sch_fact_doc |
6 авг 13, 14:41 [14669758] Ответить | Цитировать Сообщить модератору |
SerRock Member Откуда: Сообщений: 135 |
MDB.dbo.view_sch_fact_doc, всем огромное спасибо за потраченное на меня время ... после замены каждой!!! dbo. на MDB.dbo. запрос отработал и xml сохранился в положенном месте ... проблема решена ... |
6 авг 13, 15:13 [14669976] Ответить | Цитировать Сообщить модератору |
Все форумы / Microsoft SQL Server | ![]() |