SSIS 包失败并显示如下错误消息:
代码:0xC0202009 来源:DFT 填充 ImageSummary OLE_SRC ProductImage [1] 描述:SSIS 错误代码 DTS_E_OLEDBERROR。发生 OLE DB 错误。错误代码:0x80004005。OLE DB 记录可用。来源:“Microsoft SQL Native Client”Hresult:0x00040EDA 描述:“警告:空值被聚合或其他 SET 操作消除。”。
经过调查,我们发现该消息Warning: Null value is eliminated by an aggregate or other SET operation.
是由 SQL Server (2005) 查询返回的,SSIS 包作为 DFT 中的源运行,以插入到目标表中。
Select ProductID ,ImageTypeID ,DistinctImageCount ,ImageSize
from
(select a.ProductID ,a.ImageTypeID ,a.DistinctImageCount ,a.ImageSize ,RANK() OVER (PARTITION BY a.ProductID, a.ImageTypeID ORDER BY a.ImageSize) As Ranker
from
(SELECT TOP 100 Percent spi.ProductID ,sit.ImageTypeID ,CAST(COUNT(DISTINCT spi2.ImageTypeID) as bit) DistinctImageCount ,CAST(spi2.Size as varchar(50)) as ImageSize
FROM Stage.ProductImage spi CROSS JOIN Reference.ImageType sit LEFT JOIN Stage.ProductImage spi2 ON spi.ProductID = spi2.ProductID AND sit.ImageTypeID = spi2.ImageTypeID
GROUP BY spi.ProductID, sit.ImageTypeID,spi2.Size
ORDER BY spi.ProductID, sit.ImageTypeID,spi2.Size
)a
)b
where ranker = 1
Order by ProductID,ImageTypeID
我们通过修改查询消除了来自 SQL 服务器的警告消息,从而解决了这个问题:
从
CAST(COUNT(DISTINCT spi2.ImageTypeID)as bit) DistinctImageCount
至
CAST(SUM(DISTINCT ISNULL(spi2.ImageTypeID,0)) as bit) DistinctImageCount
.
但是我们有几个问题如下,我们找不到解释,希望在这个论坛上得到答案:
为什么来自 SQL 的警告会冒泡到 SSIS 包并导致 SSIS 包失败?
如果我们在具有相同数据集的所有其他开发和 UAT 环境中运行相同的包,它就可以正常工作。我们可以看到 SQL Server Management Studio 中出现警告,但不会导致 SSIS 失败。但是,我们的生产环境中的 SSIS 包失败。我们没有理解逻辑?是否有任何警告阈值?