Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 выгрузка в xml файл идет с ошибкой  [new]
SerRock
Member

Откуда:
Сообщений: 135
Уважаемые коллеги,
помогите, пожалуйста, с проблемой ...
есть запрос завернутый в хранимку

alter PROCEDURE spFaktura_to_XML_RSR
AS
BEGIN
SET NOCOUNT ON;
declare @out_xml as xml
set @out_xml =	(SELECT     TOP (100)	dbo.kniga_prodag.num_sf ,dbo.kniga_prodag.inn
FROM         dbo.kniga_prodag INNER JOIN
                      dbo.view_sch_fact_doc ONWHERE     (dbo.view_sch_fact_doc.[sum-summa] > 0)
order by num_sf 
FOR XML AUTO,elements ,root('sf'))
END


, есть др. хранимка, которая обращается к первой

ALTER procedure [dbo].[sp_toXML_RSR]
as
declare	@result int
declare @OutputFileName varchar(150)
declare @cmd varchar(150)
Set @OutputFileName = '\\10.0.7.4\ErrIU\123.xml'
Set @cmd = 'BCP "EXEC mdb.dbo.spFaktura_to_XML_RSR" queryout "' + @OutputFileName + '" -w -C1251 -r -T'
EXEC @result = master..xp_cmdshell @cmd


, и выгружает данные в xml файл ...
попытался сделать как описано в статье Glory ...
выборка дает 2 столбца, в xml переменную данные попадают, если их скопировать в блкнот и изменить расширение, то браузером открывается xml файл, а сохранить из хранимки - никак ... пишет

SQLState = S1000, NativeError = 0
Error = [Microsoft][SQL Server Native Client 10.0]Bcp файлы сервера должны содержать хотя бы один столбец
NULL


помогите, что нужно поправить ...
24 июн 13, 15:26    [14474664]     Ответить | Цитировать Сообщить модератору
 Re: выгрузка в xml файл идет с ошибкой  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 21243
Процедура spFaktura_to_XML_RSR ничего не возвращает - ни через переменные, н в поток вывода. Она наполняет локальную переменную, содержимое которой потом благополучно теряется.
24 июн 13, 18:09    [14476014]     Ответить | Цитировать Сообщить модератору
 Re: выгрузка в xml файл идет с ошибкой  [new]
SerRock
Member

Откуда:
Сообщений: 135
Akina,
т.е. нужно переменную @out_xml объявить глобально ..? или в поток вывода ... а что значит в поток вывода?
24 июн 13, 18:42    [14476142]     Ответить | Цитировать Сообщить модератору
 Re: выгрузка в xml файл идет с ошибкой  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
SerRock
Akina,
т.е. нужно переменную @out_xml объявить глобально ..? или в поток вывода ... а что значит в поток вывода?
Попробуйте так
alter PROCEDURE spFaktura_to_XML_RSR
AS
BEGIN
SET NOCOUNT ON;

SELECT     TOP (100)	dbo.kniga_prodag.num_sf ,dbo.kniga_prodag.inn
FROM         dbo.kniga_prodag INNER JOIN
                      dbo.view_sch_fact_doc ONWHERE     (dbo.view_sch_fact_doc.[sum-summa] > 0)
order by num_sf 
FOR XML AUTO,elements ,root('sf')

END
24 июн 13, 18:59    [14476205]     Ответить | Цитировать Сообщить модератору
 Re: выгрузка в xml файл идет с ошибкой  [new]
SerRock
Member

Откуда:
Сообщений: 135
Ruuu,
м-да ... ларчик просто открывался ... чрезвычайно Вам признателен ... теперь понял, что значит "в поток" ...
24 июн 13, 19:55    [14476391]     Ответить | Цитировать Сообщить модератору
 Re: выгрузка в xml файл идет с ошибкой  [new]
SerRock
Member

Откуда:
Сообщений: 135
Ruuu,
будьте добры, еще вопрос по xml ... тема для меня в общем новая ... вот xsd схема ... я прочитал, зачем она, а вот практическое использование - если при выводе for xml я указываю конкретную схему, это значит что проверяется только структура на валидность согласно этой схеме, или выгружаемые данные будут приведены в определенный порядок согласно схеме и мне не придется заботиться о структуре xml файла?
25 июн 13, 07:40    [14477390]     Ответить | Цитировать Сообщить модератору
 Re: выгрузка в xml файл идет с ошибкой  [new]
Владимир Затуливетер
Member

Откуда:
Сообщений: 427
SerRock
Ruuu,
будьте добры, еще вопрос по xml ... тема для меня в общем новая ... вот xsd схема ... я прочитал, зачем она, а вот практическое использование - если при выводе for xml я указываю конкретную схему, это значит что проверяется только структура на валидность согласно этой схеме, или выгружаемые данные будут приведены в определенный порядок согласно схеме и мне не придется заботиться о структуре xml файла?

Схема нужна для проверки валидности xml. Сам по себе xml не типизирован, это просто строка, в любой элемент мы можем записать любое значение: строку, число, дату. Но к примеру, когда вы пытаетесь сохранить какие-либо данные в столбец xml с указанной схемой, то входные данные проверяются на валидность схеме. Таким образом можно гарантировать, что в столбце всегда будут хранится только «Правильные» данные, которые соответствуют какому-либо «шаблону» схеме. Т.е. нам не дадут возможность сохранить в элемент типа int например строку.
Вот простой пример использования xml схемы в столбце:

use tempdb
go

--drop xml schema collection mySC
create xml schema collection mySC as '
<schema xmlns="http://www.w3.org/2001/XMLSchema">
	<element name="root" type="int"/>
</schema>
'
go

--drop table T
create table T ( Col1 xml(mySC) )
go

-- запишется нормально
insert into T ( col1 )
values ( '<root>123</root>' )
go

-- произойдет ошибка
insert into T ( col1 )
values ( '<root>abc</root>' )
go


Также с помощь инструкции xmlschema можно вернуть схему вместе с данными таблицы, которая формируется на основе метаданных выборки (таблицы). Метаданные это типы столбцов, максимально возможная длина хранимых данных в столбце, возможность хранения NULL значений. Можете провести эксперимент на одной из ваших таблиц:
select *
from dbo.MyTable
for xml auto, xmlschema('MyNamespace')
25 июн 13, 10:16    [14477982]     Ответить | Цитировать Сообщить модератору
 Re: выгрузка в xml файл идет с ошибкой  [new]
SerRock
Member

Откуда:
Сообщений: 135
Владимир Затуливетер,

Спасибо за очень определенный ответ ... понятно ...
25 июн 13, 10:58    [14478279]     Ответить | Цитировать Сообщить модератору
 Re: выгрузка в xml файл идет с ошибкой  [new]
Владимир Меньшиков
Member

Откуда: Санкт-Петербург
Сообщений: 68
В продолжении темы

Есть хранимая процедура
alter procedure dbo.get_xml 

AS 
SET NOCOUNT ON 

select 
	f_1 [TransDate], 
	f_2 [WhCodeFrom], 
	f_3 [WhCodeTo], 
	f_4 [StockCode], 
	f_5 [QTY], 
	f_6 [Ref], 
	'XML-File' [Note]
from tab_1 [DataReport] 
where f_0 = 'import' 
for xml auto, elements, root ('Data') 

Запускаю запрос
DECLARE @result int
DECLARE @OutputFileName varchar(150)
DECLARE @cmd varchar( 150)

Set @OutputFileName = 'c:\tmp\mysql.xml'

Set @cmd = 'BCP "EXEC get_xml" queryout "' + @OutputFileName + '" -w -UTF8 -r -T'

EXEC @result = master..xp_cmdshell @cmd 

Получаю сообщение об ошибке
SQLState = 37000, NativeError = 2812
Error = [Microsoft][SQL Server Native Client 10.0][SQL Server]Could not find stored procedure 'get_xml'.
NULL

Если выделяю
EXEC get_xml
и нажимаю F5, то получаю результат запроса.
<Data>
<Movement>
<TransDate>2013-08-21T00:00:00</TransDate>
<WhCodeFrom>04R</WhCodeFrom>
<WhCodeTo>04</WhCodeTo>
<StockCode>2024494</StockCode>
<QTY>1806.30</QTY>
<Ref>x20;</Ref>
<Note>XML-File</Note>
</Movement>
</Data>

В чем может быть причина данной ошибки? Процедура существует, и данные выводятся.
29 окт 13, 14:34    [15046698]     Ответить | Цитировать Сообщить модератору
 Re: выгрузка в xml файл идет с ошибкой  [new]
Glory
Member

Откуда:
Сообщений: 104751
Владимир Меньшиков
Процедура существует, и данные выводятся.

Процедуры существуют не абы где, а в конкретных базах
29 окт 13, 14:36    [15046708]     Ответить | Цитировать Сообщить модератору
 Re: выгрузка в xml файл идет с ошибкой  [new]
Владимир Меньшиков
Member

Откуда: Санкт-Петербург
Сообщений: 68
Использование в запросе
Set @cmd = 'BCP "EXEC mdb.dbo.get_xml" queryout "' + @OutputFileName + '" -w -UTF8 -r -T'

решило проблему
29 окт 13, 14:46    [15046764]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить