Извлечение XML с помощью операторов вставки - PullRequest
0 голосов
/ 18 декабря 2018

Я постепенно накапливаю свои знания по извлечению SQL и XML и столкнулся с проблемой ускорения, очевидно, мое понимание неясно, потому что я предположил бы, что приведенный ниже код извлечет XML в две отдельные таблицы, но что происходитзаключается в том, что он только успешно помещается в первый и полностью отсутствует второе предложение вставки - не могли бы вы сообщить мне, что я сделал неправильно

DECLARE @XMLData XML

delete from [dbo].[XMLCustomerDetails]
delete from [dbo].[XMLOrderDetails]


SELECT @xmldata = [XMLData] FROM [OPENXML];
--First of all we declare the default namespace (xmlns="Some URI")
WITH XMLNAMESPACES(DEFAULT 'http://www.adventure-works.com') 
------------------------------------------------------------------------------------------------------
insert into [dbo].[XMLCustomerDetails]
([CustomerID],[CompanyName],[ContactName],[ContactTitle],[Phone],[Address])

SELECT pd.value('(@CustomerID)[1]','nvarchar(max)') AS CustomerID
      ,pd.value('(CompanyName/text())[1]','nvarchar(max)') AS CompanyName
      ,pd.value('(ContactName/text())[1]','nvarchar(max)') AS ContactName
      ,pd.value('(ContactTitle/text())[1]','nvarchar(max)') AS ContactTitle
      ,pd.value('(Phone/text())[1]','nvarchar(max)') AS Phone
      ,pd.value('(FullAddress/Address/text())[1]','nvarchar(max)') AS Address
      --,td.value('(@CustomerID)[1]','nvarchar(max)') AS CustomerID
FROM @xmldata.nodes('//Root') as A(c)
cross apply @xmlData.nodes('//Root/Customers/Customer') as i(pd)

-------------------------------------------------------------------------------------------------------

insert into [dbo].[XMLOrderDetails]
([CustomerID]
,[EmployeeID],[OrderDate],[RequiredDate],[ShipVia]
,[Feight],[ShipName],[ShipAddress],[ShipCity],[ShipRegion],[ShipPostalCode],[ShipCountry]
)

SELECT td.value('(CustomerID/text())[1]','nvarchar(max)') AS CustomerID,
       td.value('(EmployeeID/text())[1]','nvarchar(max)') AS EmployeeID,
       td.value('(OrderDate/text())[1]','nvarchar(max)') AS OrderDate,
       td.value('(RequiredDate/text())[1]','nvarchar(max)')AS RequiredDate,
       td.value('(ShipInfo/ShipVia/text())[1]','nvarchar(max)') AS ShipVia,
       td.value('(ShipInfo/Freight/text())[1]','nvarchar(max)') AS Freight,
       td.value('(ShipInfo/ShipName/text())[1]','nvarchar(max)') AS ShipName,
       td.value('(ShipInfo/ShipAddress/text())[1]','nvarchar(max)') AS ShipAddress,
       td.value('(ShipInfo/ShipCity/text())[1]','nvarchar(max)') AS ShipCity,
       td.value('(ShipInfo/ShipRegion/text())[1]','nvarchar(max)') AS ShipRegion,
       td.value('(ShipInfo/ShipPostalCode/text())[1]','nvarchar(max)') AS ShipPostalCode,
       td.value('(ShipInfo/ShipCountry/text())[1]','nvarchar(max)') AS ShipCountry
from @xmldata.nodes('//Root') B(c)
cross apply @xmlData.nodes('//Root/Orders/Order') as o(td)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...