0

假设我有一个简单的 XML 文件源,我已将它映射到我的 SQL 服务器数据库中的相应接收器。

<Date Date="2020-03-13Z">
    <Identification>
        <Identifier>Maverick</Identifier>
    </Identification>
    <Pilot HomeAirport="New York">
        <AirportICAOCode>USA</AirportICAOCode>
    </Pilot>
</Date>

然后是架构

CREATE TABLE pilots
identifier VARCHAR(20),
ICAO_code VARCHAR(3)
)

我在我的 sql server 数据库中创建了一个存储过程,该过程接受用户定义的表类型 Pilots_type 的输入,它对应于上述模式以正确合并我的数据。

但是当运行出现错误时管道失败:

{
"errorCode": "2200",
"message": "ErrorCode=UserErrorInvalidPluginType,'Type=Microsoft.DataTransfer.Common.Shared.PluginNotRegisteredException,Message=Invalid type 'XmlFormat' is provided in 'format'. Please correct the type in payload and retry.,Source=Microsoft.DataTransfer.ClientLibrary,'",
"failureType": "UserError",
"target": "Sink XML",
"details": []
}

参见图片
这里的源是一个包含 XML 的 blob。 在此处输入图像描述

毕竟不支持 XML 作为源吗?

4

1 回答 1

2

支持 XML 作为源。
我已经成功根据您的示例 xml 文件和 sql 表进行了相同的测试。

  1. 我创建了一个名为的表类型ct_pilot_type
CREATE TYPE ct_pilot_type AS TABLE(
identifier  nvarchar(MAX),
ICAO_code nvarchar(MAX)
)
  1. 我创建了名为的存储过程spUpsertPolit
CREATE PROCEDURE spUpsertPolit

@polit ct_pilot_type READONLY

AS

BEGIN

MERGE [dbo].[pilot_airports] AS target_sqldb

USING @polit AS source_tblstg

ON (target_sqldb.identifier = source_tblstg.identifier)

WHEN MATCHED THEN

UPDATE SET

identifier = source_tblstg.identifier,

ICAO_code = source_tblstg.ICAO_code


WHEN NOT MATCHED THEN

INSERT (

identifier,

ICAO_code

)

VALUES (

source_tblstg.identifier,

source_tblstg.ICAO_code

);

END
  1. 我在 Copy 活动中设置了接收器:

在此处输入图像描述

  1. 我设置了映射:

在此处输入图像描述

  1. 它成功创建了: 在此处输入图像描述

  2. 结果显示:
    在此处输入图像描述

于 2020-09-21T10:05:41.140 回答