Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
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] Ответить | Цитировать Сообщить модератору |
BKV88 Member Откуда: Москва Сообщений: 243 |
В файле должно быть несколько блоков:<КнПокСтр НомерПор="2" НомСчФПрод="11" ДатаСчФПрод="01.04.2015" СтоимПокупВ="4588" СумНДСВыч="6554,64"> <КодВидОпер>01</КодВидОпер> <ДатаУчТов>01.04.2015</ДатаУчТов> <СвПрод> <СведЮЛ ИННЮЛ="111" КПП="111"></СведЮЛ> </СвПрод> </КнПокСтр> |
13 окт 15, 19:07 [18274487] Ответить | Цитировать Сообщить модератору |
yaxta Member Откуда: азербайджан,баку Сообщений: 518 |
просто каша |
||
13 окт 15, 19:45 [18274576] Ответить | Цитировать Сообщить модератору |
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 | ![]() |