问题描述
我在sql中具有以下表值类型,在Azure数据工厂中使用该表值类型在大容量复制活动中通过存储过程从平面文件导入数据。文件1包含所有三列,因此可以正常工作。文件2仅包含Column1
和Column2
,但没有 Column3
。我认为由于该列被定义为NULL,所以可以,但是ADF抱怨当表类型期望为3时,它试图在2列中传递。是否有办法在两个文件中重用此类型并使Column3成为可选项?
CREATE TYPE [dbo].[TestType] AS TABLE(
Column1 varchar(50) NULL,Column2 varchar(50) NULL,Column3 varchar(50) NULL
)
目标LandSource上的操作失败: ErrorCode = sqlOperationFailed,'类型= Microsoft.DataTransfer.Common.Shared.HybridDeliveryException,消息= A 数据库操作失败,并显示以下错误:“尝试传递一个 具有2列的表值参数,其中对应的 用户定义的表类型需要3列
如果复制活动行为是一致的,那么无论该活动中是否使用了具有表类型的存储过程或本机BCP,都很好。当不使用表类型并使用默认的批量插入时,源文件中缺少的列最终在目标表中为NULL,而不会出现错误(假定列为NULLABLE)。
解决方法
这将导致ADF中的映射错误。
- 在“复制活动”中,每个列都需要映射。
- 如果源文件只有两列,将导致映射错误。
因此,我建议您创建两个不同的Copy活动并创建一个两列表类型。
,您可以通过可选列,我已经成功进行了测试,但是步骤会有些复杂。就我而言,文件1具有所有三列,文件2仅具有Column1和Column2,而没有Column3。它将使用“获取元数据”活动,“设置变量”活动,“ ForEach”活动,“ IfCondition”活动。
请按照我的步骤操作: