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

Откуда: Москва
Сообщений: 243
Добрый день!
Необходимо выгрузить данные в XML файл из таблицы
Если в таблице одна запись с этим проблем не возникает.
Как изменить скрипт, чтобы выводились данные при большем количестве записей

На выходе должен получиться такой файл:

<?xml version="1.0" encoding="windows-1251"?><Файл xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ИдФайл="11111" ВерсПрог="11" ВерсФорм="11">
<Документ Индекс="0000080" НомКорр="1" ПризнСвед8="0">
<КнигаПокуп СумНДСВсКПк="22050338.95">
<КнПокСтр НомерПор="1" НомСчФПрод="11"
ДатаСчФПрод="01.04.2015" СтоимПокупВ="4588" СумНДСВыч="6554,64">
<КодВидОпер>01</КодВидОпер>
<ДатаУчТов>01.04.2015</ДатаУчТов>
<СвПрод>
<СведЮЛ ИННЮЛ="2222" КПП="222"></СведЮЛ>
</СвПрод>
</КнПокСтр>
<КнПокСтр НомерПор="2" НомСчФПрод="11"
ДатаСчФПрод="01.04.2015" СтоимПокупВ="4588" СумНДСВыч="6554,64">
<КодВидОпер>01</КодВидОпер>
<ДатаУчТов>01.04.2015</ДатаУчТов>
<СвПрод>
<СведЮЛ ИННЮЛ="111" КПП="111"></СведЮЛ>
</СвПрод>
</КнПокСтр>
</КнигаПокуп>
</Документ>
</Файл>


Сам скрипт:

DROP Table #Book8
GO

CREATE TABLE #Book8(
	[НомерПор] [varchar](255) NULL,
	[КодВидОпер] [varchar](255) NULL,
	[НомСчФПрод] [varchar](255) NULL,
	[ДатаСчФПрод] [varchar](255) NULL,
	[ДатаУчТов] [varchar](255) NULL,
	[ИННЮЛ] [varchar](255) NULL,
	[КПП] [varchar](255) NULL,
	[СтоимПокупВ] [varchar](255) NULL,
	[СумНДСВыч] [varchar](255) NULL
)

INSERT INTO #Book8 VALUES ('1','01','11','01.04.2015','01.04.2015','2222','222','4588','6554,64')
INSERT INTO #Book8 VALUES ('2','01','11','01.04.2015','01.04.2015','111111','1111','4 540,00','692,54')




declare @t1 table	(
	[НомерПор] [varchar](255) NULL,
	[КодВидОпер] [varchar](255) NULL,
	[НомСчФПрод] [varchar](255) NULL,
	[ДатаСчФПрод] [varchar](255) NULL,
	[ДатаУчТов] [varchar](255) NULL,
	[ИННЮЛ] [varchar](255) NULL,
	[КПП] [varchar](255) NULL,
	[СтоимПокупВ] [varchar](255) NULL,
	[СумНДСВыч] [varchar](255) NULL
					)
declare @filename varchar(255)
		,@xml nvarchar(max)
		,@FS int
		,@OLEResult int
		,@FileID int

insert into @t1
select	 *
from	#Book8
where [НомерПор]=1
 

set @filename = 'D:\111.xml'
set @xml =   N'<?xml version="1.0" encoding="windows-1251"?>' +
N'<Файл xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ИдФайл="111" ВерсПрог="11" ВерсФорм="11">'+
N'<Документ Индекс="0000080" НомКорр="1" ПризнСвед8="0">'+
N'<КнигаПокуп СумНДСВсКПк="22050338.95">'+
N'<КнПокСтр НомерПор="'+(select [НомерПор] from @t1)+'" НомСчФПрод="'+(select [НомСчФПрод] from @t1)+'"
ДатаСчФПрод="'+(select [ДатаСчФПрод] from @t1)+'" СтоимПокупВ="'+(select [СтоимПокупВ] from @t1)+'" СумНДСВыч="'+(select [СумНДСВыч] from @t1)+'">'+ 
N'<КодВидОпер>'+(select [КодВидОпер] from @t1)+'</КодВидОпер>'+
N'<ДатаУчТов>'+(select [ДатаУчТов] from @t1)+'</ДатаУчТов>'+
N'<СвПрод>'+
N'<СведЮЛ ИННЮЛ="'+(select [ИННЮЛ] from @t1)+'" КПП="'+(select [КПП] from @t1)+'">'+
N'</СведЮЛ>'+
N'</СвПрод>'+
N'</КнПокСтр>'+
N'</КнигаПокуп>'+
N'</Документ>'+
N'</Файл>'
execute @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @FS OUTPUT
execute @OLEResult = sp_OAMethod @FS,'CreateTextFile',@FileID OUTPUT, @FileName
execute @OLEResult = sp_OAMethod @FileID,'OpenAsTextStream(ForWriting, 2)'
execute @OLEResult = sp_OAMethod @FileID, 'Write', NULL, @xml
execute @OLEResult = sp_OADestroy @FileID
execute @OLEResult = sp_OADestroy @FS
select	@filename
13 окт 15, 19:05    [18274484]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка XML  [new]
BKV88
Member

Откуда: Москва
Сообщений: 243
В файле должно быть несколько блоков:

<КнПокСтр НомерПор="2" НомСчФПрод="11"
ДатаСчФПрод="01.04.2015" СтоимПокупВ="4588" СумНДСВыч="6554,64">
<КодВидОпер>01</КодВидОпер>
<ДатаУчТов>01.04.2015</ДатаУчТов>
<СвПрод>
<СведЮЛ ИННЮЛ="111" КПП="111"></СведЮЛ>
</СвПрод>
</КнПокСтр>
13 окт 15, 19:07    [18274487]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка XML  [new]
yaxta
Member

Откуда: азербайджан,баку
Сообщений: 518
BKV88
Добрый день!
Необходимо выгрузить данные в XML файл из таблицы
Если в таблице одна запись с этим проблем не возникает.
Как изменить скрипт, чтобы выводились данные при большем количестве записей

На выходе должен получиться такой файл:

<?xml version="1.0" encoding="windows-1251"?><Файл xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ИдФайл="11111" ВерсПрог="11" ВерсФорм="11">
<Документ Индекс="0000080" НомКорр="1" ПризнСвед8="0">
<КнигаПокуп СумНДСВсКПк="22050338.95">
<КнПокСтр НомерПор="1" НомСчФПрод="11"
ДатаСчФПрод="01.04.2015" СтоимПокупВ="4588" СумНДСВыч="6554,64">
<КодВидОпер>01</КодВидОпер>
<ДатаУчТов>01.04.2015</ДатаУчТов>
<СвПрод>
<СведЮЛ ИННЮЛ="2222" КПП="222"></СведЮЛ>
</СвПрод>
</КнПокСтр>
<КнПокСтр НомерПор="2" НомСчФПрод="11"
ДатаСчФПрод="01.04.2015" СтоимПокупВ="4588" СумНДСВыч="6554,64">
<КодВидОпер>01</КодВидОпер>
<ДатаУчТов>01.04.2015</ДатаУчТов>
<СвПрод>
<СведЮЛ ИННЮЛ="111" КПП="111"></СведЮЛ>
</СвПрод>
</КнПокСтр>
</КнигаПокуп>
</Документ>
</Файл>


Сам скрипт:

DROP Table #Book8
GO

CREATE TABLE #Book8(
	[НомерПор] [varchar](255) NULL,
	[КодВидОпер] [varchar](255) NULL,
	[НомСчФПрод] [varchar](255) NULL,
	[ДатаСчФПрод] [varchar](255) NULL,
	[ДатаУчТов] [varchar](255) NULL,
	[ИННЮЛ] [varchar](255) NULL,
	[КПП] [varchar](255) NULL,
	[СтоимПокупВ] [varchar](255) NULL,
	[СумНДСВыч] [varchar](255) NULL
)

INSERT INTO #Book8 VALUES ('1','01','11','01.04.2015','01.04.2015','2222','222','4588','6554,64')
INSERT INTO #Book8 VALUES ('2','01','11','01.04.2015','01.04.2015','111111','1111','4 540,00','692,54')




declare @t1 table	(
	[НомерПор] [varchar](255) NULL,
	[КодВидОпер] [varchar](255) NULL,
	[НомСчФПрод] [varchar](255) NULL,
	[ДатаСчФПрод] [varchar](255) NULL,
	[ДатаУчТов] [varchar](255) NULL,
	[ИННЮЛ] [varchar](255) NULL,
	[КПП] [varchar](255) NULL,
	[СтоимПокупВ] [varchar](255) NULL,
	[СумНДСВыч] [varchar](255) NULL
					)
declare @filename varchar(255)
		,@xml nvarchar(max)
		,@FS int
		,@OLEResult int
		,@FileID int

insert into @t1
select	 *
from	#Book8
where [НомерПор]=1
 

set @filename = 'D:\111.xml'
set @xml =   N'<?xml version="1.0" encoding="windows-1251"?>' +
N'<Файл xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ИдФайл="111" ВерсПрог="11" ВерсФорм="11">'+
N'<Документ Индекс="0000080" НомКорр="1" ПризнСвед8="0">'+
N'<КнигаПокуп СумНДСВсКПк="22050338.95">'+
N'<КнПокСтр НомерПор="'+(select [НомерПор] from @t1)+'" НомСчФПрод="'+(select [НомСчФПрод] from @t1)+'"
ДатаСчФПрод="'+(select [ДатаСчФПрод] from @t1)+'" СтоимПокупВ="'+(select [СтоимПокупВ] from @t1)+'" СумНДСВыч="'+(select [СумНДСВыч] from @t1)+'">'+ 
N'<КодВидОпер>'+(select [КодВидОпер] from @t1)+'</КодВидОпер>'+
N'<ДатаУчТов>'+(select [ДатаУчТов] from @t1)+'</ДатаУчТов>'+
N'<СвПрод>'+
N'<СведЮЛ ИННЮЛ="'+(select [ИННЮЛ] from @t1)+'" КПП="'+(select [КПП] from @t1)+'">'+
N'</СведЮЛ>'+
N'</СвПрод>'+
N'</КнПокСтр>'+
N'</КнигаПокуп>'+
N'</Документ>'+
N'</Файл>'
execute @OLEResult = sp_OACreate 'Scripting.FileSystemObject', @FS OUTPUT
execute @OLEResult = sp_OAMethod @FS,'CreateTextFile',@FileID OUTPUT, @FileName
execute @OLEResult = sp_OAMethod @FileID,'OpenAsTextStream(ForWriting, 2)'
execute @OLEResult = sp_OAMethod @FileID, 'Write', NULL, @xml
execute @OLEResult = sp_OADestroy @FileID
execute @OLEResult = sp_OADestroy @FS
select	@filename




просто каша
13 окт 15, 19:45    [18274576]     Ответить | Цитировать Сообщить модератору
 Re: Выгрузка XML  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1698
BKV88,

чот пипец у вас.

IF OBJECT_ID('tempdb..#Book8') IS NOT NULL DROP Table #Book8
GO

CREATE TABLE #Book8(
	[НомерПор] [varchar](255) NULL,
	[КодВидОпер] [varchar](255) NULL,
	[НомСчФПрод] [varchar](255) NULL,
	[ДатаСчФПрод] [varchar](255) NULL,
	[ДатаУчТов] [varchar](255) NULL,
	[ИННЮЛ] [varchar](255) NULL,
	[КПП] [varchar](255) NULL,
	[СтоимПокупВ] [varchar](255) NULL,
	[СумНДСВыч] [varchar](255) NULL
)

INSERT INTO #Book8 VALUES ('1','01','11','01.04.2015','01.04.2015','2222','222','4588','6554,64')
INSERT INTO #Book8 VALUES ('2','01','11','01.04.2015','01.04.2015','111111','1111','4 540,00','692,54')

SET NOCOUNT ON
DECLARE
       @FileID INT,
       @Version VARCHAR(20),
       @FormatVersion VARCHAR(20),
       @DocID VARCHAR(20),
       @DocNumCorr INT,
       @DocFlag INT,
       @NdsSumm VARCHAR(20),
       @xml_string VARCHAR(MAX),
       @xml XML

SELECT @FileID = 11111,
       @Version = '11',
       @FormatVersion = '11',
       @DocID = '0000080',
       @DocNumCorr = 1,
       @DocFlag = 0,
       @NdsSumm = '22050338.95'

SET @xml_string = '<?xml version="1.0" encoding="windows-1251"?>'

SET @xml_string = @xml_string + CAST(
(
SELECT
      @DocID AS '@Индекс',
      @DocNumCorr AS '@НомКорр',
      @DocFlag AS '@ПризнСвед8',
      @NdsSumm AS 'КнигаПокуп/@СумНДСВсКПк',
      (SELECT [НомерПор] AS '@НомерПор',
              [НомСчФПрод] AS '@НомСчФПрод',
              [ДатаСчФПрод] AS '@ДатаСчФПрод',
              [СтоимПокупВ] AS '@СтоимПокупВ',
              [СумНДСВыч] AS '@СумНДСВыч',
              [КодВидОпер] AS [КодВидОпер],
              [ДатаУчТов] AS [ДатаУчТов],
              [ИННЮЛ] AS 'СвПрод/СведЮЛ/@ИННЮЛ',
              [КПП] AS 'СвПрод/СведЮЛ/@КПП'
       FROM #Book8 FOR XML PATH('КнПокСтр'), TYPE) AS 'КнигаПокуп'
FOR XML PATH('Документ'), TYPE) AS VARCHAR(MAX))

SET @xml = CONVERT(XML, @xml_string)

;WITH XMLNAMESPACES ( 'http://www.w3.org/2001/XMLSchema-instance' AS xsi )  
SELECT @FileID AS '@ИдФайл',
       @Version AS '@ВерсПрог',
       @FormatVersion AS '@ВерсФормат',
       @xml
FOR XML PATH('Файл')


набросал побыстрому мб где что просмотрел
14 окт 15, 00:25    [18275432]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить