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

Откуда:
Сообщений: 9
Пожелание все сделать внутри with или select.

--Таблица состояний документа:
declare @States table (StateId int, StateCode varchar(50))

--Таблица документов
declare @Documents table (DocumentId int, DocumentGUID uniqueidentifier, StateId int)

--Таблица детализации документов
declare @Goods table(DocumentId int, Barcode varchar(50), Price money)

-- Начальные данные
insert @States values(1, 'OК')
insert @States values(2, 'Cancel')

insert @Documents values(1, NEWID(), 1)
insert @Documents values(2, NEWID(), 1)
insert @Documents values(3, NEWID(), 2)

insert @Goods values(1, '11', 11)
insert @Goods values(1, '12', 12)
insert @Goods values(3, '31', 31)
insert @Goods values(3, '32', 32)

--<Root>
-- <Document GUID="" StateCode="">
-- <Goods Barcode="" Price="" />
-- <Goods Barcode="" Price="" />
-- </Document>
-- ...
-- </Root>
;with hhh(hhh) as
(select CAST((select Document.DocumentGUID as [GUID],
(select States.StateCode from @States States where Document.StateId=States.StateId) as [StateCode],
Goods.Barcode as [BarCode],
Goods.Price as [Price]
from @Documents Document
inner join @Goods Goods
on Document.DocumentId=Goods.DocumentId order by DocumentGUID,StateCode for xml auto)
as xml) FOR XML RAW('ROOT'),
-- update hhh SET docum.MODIFY('replace value of (/Document/StateCode/text()) with "ОК" ')
6 сен 16, 15:47    [19633443]     Ответить | Цитировать Сообщить модератору
 Re: Помогите изменни сформированый XML.  [new]
demianseedy
Member

Откуда:
Сообщений: 9
--Таблица состояний документа:
declare @States table (StateId int, StateCode varchar(50))

--Таблица документов
declare @Documents table (DocumentId int, DocumentGUID uniqueidentifier, StateId int)

--Таблица детализации документов
declare @Goods table(DocumentId int, Barcode varchar(50), Price money)

-- Начальные данные
insert @States values(1, 'OК')
insert @States values(2, 'Cancel')

insert @Documents values(1, NEWID(), 1)
insert @Documents values(2, NEWID(), 1)
insert @Documents values(3, NEWID(), 2)

insert @Goods values(1, '11', 11)
insert @Goods values(1, '12', 12)
insert @Goods values(3, '31', 31)
insert @Goods values(3, '32', 32)

--<Root>
-- <Document GUID="" StateCode="">
-- <Goods Barcode="" Price="" />
-- <Goods Barcode="" Price="" />
-- </Document>
-- ...
-- </Root>
DECLARE @xmlDoc xml
SET @xmlDoc = (select CAST((select Document.DocumentGUID as [GUID],
(select States.StateCode from @States States where Document.StateId=States.StateId) as [StateCode],
Goods.Barcode as [BarCode],
Goods.Price as [Price]
from @Documents Document
inner join @Goods Goods
on Document.DocumentId=Goods.DocumentId order by DocumentGUID,StateCode for xml auto)
as xml) FOR XML RAW('ROOT'))
SET @xmlDoc.modify('replace value of (ROOT/Document/@StateCode[1]/text(1)) with "ОК"')
6 сен 16, 16:52    [19633848]     Ответить | Цитировать Сообщить модератору
 Re: Помогите изменни сформированый XML.  [new]
felix_ff
Member

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

select
      d.DocumentGUID AS [@GUID],
	  s.[StateCode] AS [@StateCode],
	  X.data as [*]
 from @Documents d
     join @States s on s.StateId = d.StateID
	 cross apply (select g.BarCode as [@BarCode],
	                     g.Price AS [@Price]
				  FROM @Goods g where g.DocumentId = d.DocumentId for xml path('Goods'), type) X(data)
for xml Path('Document'), ROOT('ROOT')
6 сен 16, 22:44    [19634850]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить