将 xml 中的数据添加到 Biztalk 中的 SQL Server 数据库中

问题描述 投票:0回答:2
sql-server xslt biztalk
2个回答
0
投票

请尝试以下操作作为存储过程的起点。

您可能需要调整一些事情:

  • 修改
    .value()
    方法第二个参数数据类型以匹配您的目标表。
  • 通过
    TRIM()
    函数删除周围的双引号。

SQL

DECLARE @param XML = 
N'<Root xmlns="http://schema.Balance_SourceSchema">
    <Balance xmlns="">
        <Company>"PKG"</Company>
        <Account>"1010.10.10"</Account>
        <Type>"P&amp;L"</Type>
        <Description>"FREIGHT REVENUE"</Description>
        <Units>""</Units>
        <Branch>"HKC"</Branch>
        <Department>"BIL"</Department>
        <Activity>"Forwarding"</Activity>
        <Direction>"Export"</Direction>
        <Mode>"Sea"</Mode>
        <Year>"2023"</Year>
        <Period>"202305"</Period>
        <AmountInPeriod>"-31,844.20</AmountInPeriod>
        <Currency>"HAKD"</Currency>
    </Balance>
</Root>';
    
;WITH XMLNAMESPACES('http://schema.Balance_SourceSchema' AS ns1)
--INSERT INTO <targetTable> (Company, Account, ...)
SELECT TRIM('"' FROM c.value('(Company/text())[1]', 'VARCHAR(20)')) AS Company
, c.value('(Account/text())[1]', 'VARCHAR(20)') AS Account
, c.value('(Type/text())[1]', 'VARCHAR(20)') AS Type
, c.value('(Description/text())[1]', 'VARCHAR(50)') AS Description
, c.value('(Units/text())[1]', 'VARCHAR(20)') AS Units
, c.value('(Branch/text())[1]', 'VARCHAR(20)') AS Branch
, c.value('(Department/text())[1]', 'VARCHAR(20)') AS Department
, c.value('(Activity/text())[1]', 'VARCHAR(20)') AS Activity
, c.value('(Direction/text())[1]', 'VARCHAR(20)') AS Direction
, c.value('(Mode/text())[1]', 'VARCHAR(20)') AS Mode
, c.value('(Year/text())[1]', 'CHAR(4)') AS Year
, c.value('(Period/text())[1]', 'VARCHAR(10)') AS Period
, c.value('(AmountInPeriod/text())[1]', 'VARCHAR(20)') AS AmountInPeriod
, c.value('(Currency/text())[1]', 'VARCHAR(20)') AS Currency
FROM @param.nodes('/ns1:Root/Balance') AS t(c);

0
投票

我通过创建一个消费适配器服务解决了这个问题,该服务将作为目标模式并在编排中使用映射并使用 req、resp 端口,这给了我打印有数据的表格。

© www.soinside.com 2019 - 2024. All rights reserved.