请尝试以下操作作为存储过程的起点。
您可能需要调整一些事情:
.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&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);
我通过创建一个消费适配器服务解决了这个问题,该服务将作为目标模式并在编排中使用映射并使用 req、resp 端口,这给了我打印有数据的表格。