Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 XML. Только на Вас уповаю, больше спросить не у кого.  [new]
i-n-d-e-x
Member

Откуда:
Сообщений: 31
Microsoft SQL Server 2008 (RTM) - 10.0.1600.22 (Intel X86)
Build 3790: Service Pack 2

Есть задача по расписанию выполнять запрос и получать результат в виде файла с именем YYYYMMDD_HH:MM:SS.XML в кодировке windows-1251 , который отправлять электронной почтой адресату.

Запрос
select * from table FOR XML PATH ('ITEM'), root('ITEMS')

на клиенте Management studio исполняется нормально с результатом

<ITEMS>
<ITEM>
<CODE>6867</CODE>
<VENDOR_COUNTRY>Италия</VENDOR_COUNTRY>
</ITEM>
</ITEMS>

При попытке выполнить его через SQLCMD.EXE
командная строка
SQLCMD.EXE  -o result.XML  -fi:1251, o:1251 -S server  -U user -P password  -i test01.sql  

результат:

XML_F52E2B61-18A1-11d1-105-00805F49916B ------------------------------------------------------------------------------------------------------------------------------
0x44044900540045004D00440443004F0044004500440B50004100520054005F004E0055004D0042004500520044044E0041004D00450044034...


Эту проблему я победил поставив в первую строку запроса текст
:XML ON

результат такой
<ITEMS><ITEM><VENDOR_COUNTRY>Италия</VENDOR_COUNTRY></ITEM></ITEMS>
- весь результат в одну строку
- кодировка UTF-8


Вопросы:
- как получить результат в кодировке windows-1251 без перекодировки другими программами? Опция -f не помогает
- как восстановить лесенки - ступеньки в тексте XML?
- как сделать имя выходного файла по правилу YYYYMMDD_HH:MM:CC?
16 июн 16, 12:55    [19299920]     Ответить | Цитировать Сообщить модератору
 Re: XML. Только на Вас уповаю, больше спросить не у кого.  [new]
AlanDenton
Member [скрыт]

Откуда:
Сообщений: 1004
i-n-d-e-x
- как получить результат в кодировке windows-1251 без перекодировки другими программами?

Читайте справку по bcp

i-n-d-e-x
- как восстановить лесенки - ступеньки в тексте XML?

Только самому - форматирование SSMS делает

i-n-d-e-x
- как сделать имя выходного файла по правилу YYYYMMDD_HH:MM:CC?

IF OBJECT_ID('tempdb.dbo.##temp') IS NOT NULL
    DROP TABLE ##temp

SELECT val = '<a>12</a>'
INTO ##temp

DECLARE @sql NVARCHAR(4000) = 'bcp "SELECT * FROM ##temp" queryout "D:\sample.html" -S ' + @@servername + ' -T -w -r -t'
EXEC sys.xp_cmdshell @sql

а там дальше имя задаете какое хочется...
16 июн 16, 13:08    [19299985]     Ответить | Цитировать Сообщить модератору
 Re: XML. Только на Вас уповаю, больше спросить не у кого.  [new]
i-n-d-e-x
Member

Откуда:
Сообщений: 31
Большое спасибо.
16 июн 16, 13:15    [19300017]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить