【发布时间】:2012-10-31 12:03:15
【问题描述】:
一个 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 服务器 (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 Server 的警告消息,从而解决了这个问题:
来自
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 包 环境失败。我们没有理解逻辑?有没有 任何警告阈值?
【问题讨论】:
-
对于#2,这听起来像是生产与开发和 UAT 之间补丁级别的差异。你能确认一下吗?
-
不幸的是,它们完全一样! SQL Server 2005 SP4 CU3 已全面应用。
标签: sql-server-2005 ssis