powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Извлечение данных из XML в таблицу
3 сообщений из 3, страница 1 из 1
Извлечение данных из XML в таблицу
    #40029228
Здравствуйте, когда столкнулся с тем, что в хранимой табличной функции нельзя вызывать процедуру
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
Извлечение данных из XML в таблицу
    #40029291
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господин Уэф!
нагуглил такой пример.

Господин Уэф!
Не совсем понимаю, как работает этот 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
Извлечение данных из XML в таблицу
    #40029409
Фотография vikkiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может и не самый производительный пример но вполне репрезентативный для нескольких сценариев навигации (свойства, элементы, вложенные наборы)
Код: 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
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Извлечение данных из XML в таблицу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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