Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Извлечение данных из XML в таблицу / 3 сообщений из 3, страница 1 из 1
19.12.2020, 11:37
    #40029228
Извлечение данных из XML в таблицу
Здравствуйте, когда столкнулся с тем, что в хранимой табличной функции нельзя вызывать процедуру
EXEC sp_xml_preparedocument ...
нагуглил такой пример.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
DECLARE @Table TABLE (Id varchar(10))

DECLARE @Input XML = '<Ids><Id>code123</Id><Id>code124</Id></Ids>'

INSERT INTO @Table(Id)
SELECT IdNode.value('(.)[1]', 'varchar(10)')
FROM @input.nodes('/Ids/Id') AS IdTbl(IdNode)

SELECT * FROM @Table



Не совсем понимаю, как работает этот select .... from @input.nodes
можете просветить?

И можно ли на его основе написать разбор в таблицу с множеством столбцов например

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<rec>
    <Id>code123</Id>
    <name>qwerty</name>
    <cnt>10</cnt>
</rec>
<rec>
    <Id>code124</Id>
    <name>asdfg</name>
    <cnt>100</cnt>
</rec> 
...
Рейтинг: 0 / 0
19.12.2020, 18:12
    #40029291
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных из XML в таблицу
Господин Уэф!
нагуглил такой пример.

Господин Уэф!
Не совсем понимаю, как работает этот select .... from @input.nodes
можете просветить?

Странно, что пример нагуглился, а оф. документация - нет. Лучше читать её: https://docs.microsoft.com/en-us/sql/t-sql/xml/nodes-method-xml-data-type?view=sql-server-ver15
...
Рейтинг: 0 / 0
20.12.2020, 04:37
    #40029409
vikkiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Извлечение данных из XML в таблицу
может и не самый производительный пример но вполне репрезентативный для нескольких сценариев навигации (свойства, элементы, вложенные наборы)
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
use [Adventure Works DW]
declare @x xml;
with prod as
(select top (5) [ProductKey]as[@ProdKey]
      ,[EnglishProductName]
      ,[ModelName]
      ,[EnglishDescription]
      ,[ProductAlternateKey]as[Data/ProductAlternateKey]
      ,[ProductSubcategoryKey]as[Data/SubCatKey]
      ,[ProductLine]as[Data/ProdLine]
      ,[FinishedGoodsFlag]as[Info/@FinishedG]
      ,[SizeUnitMeasureCode]as[Info/@SizeUnitCode]
      ,[Color]as[Info/Col]
      ,[WeightUnitMeasureCode]as[Info/WeightUnitCode]
      ,[Size]as[Info/Size]
      ,[Class]as[Info/Class]
      ,[Style]as[Info/Style]
      ,[LargePhoto]as[Info/Pic]
      ,[StandardCost]
      ,[ListPrice]
      ,[DealerPrice]
      ,[ReorderPoint]
      ,[DaysToManufacture]
  from [dbo].[DimProduct]
order by --hashbytes('SHA2_256',cast(ProductKey as nvarchar(64)))
		newid())
select @x=(select * from prod for xml path('Product'),elements xsinil,root('AdventureWorksDW'),binary base64)
select @x as [x]
select N'<?xml version="1.0" encoding="UTF-8"?>'+cast(@x as nvarchar(max)) as [x]

select
 xl.aw.value('(./@ProdKey)[1]','int') as [ProdKey]
,xl.aw.query('./ModelName').value('.','varchar(128)') as [ModelName]
,xl.aw.value('(./Info/@SizeUnitCode)[1]','varchar(8)') as [SizeUnitCode]
,xl.aw.query('./Data/SubCatKey').value('.','smallint') as [SubCategoryKey]
,xl.aw.query('./ListPrice').value('.','money') as [ListPrice]
,xl.aw.query('./Info/Col').value('.','varchar(32)') as [Colour]
,xl.aw.query('./Info/Pic').value('.','varbinary(max)') as [Photo]
,pr.LargePhoto as [Orig.Img]
,pr.ListPrice as [Orig.ProdLstPr]
from @x.nodes('/AdventureWorksDW/Product')as xl(aw)
left join [dbo].[DimProduct] as pr on xl.aw.value('(./@ProdKey)[1]','int')=pr.ProductKey
where xl.aw.value('(./@ProdKey)[1]','int')>200

дальше там конечно уже чуть сложнее (namespaces и пр.)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Извлечение данных из XML в таблицу / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]