【问题标题】:Why does a NULL aggregate warning in an SQL query causes the SSIS package to fail?为什么 SQL 查询中的 NULL 聚合警告会导致 SSIS 包失败?
【发布时间】: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

但是我们有几个问题如下,我们找不到解释,希望在这个论坛上得到答案:

  1. 为什么来自 SQL 的警告会冒泡到 SSIS 包并导致 SSIS 包失败?

  2. 如果我们在所有其他开发和 UAT 环境中运行相同的包 使用相同的数据集,它工作正常。我们可以看到警告 出现在 SQL Server Management Studio 中,但没有 导致 SSIS 失败。但是我们生产中的 SSIS 包 环境失败。我们没有理解逻辑?有没有 任何警告阈值?

【问题讨论】:

  • 对于#2,这听起来像是生产与开发和 UAT 之间补丁级别的差异。你能确认一下吗?
  • 不幸的是,它们完全一样! SQL Server 2005 SP4 CU3 已全面应用。

标签: sql-server-2005 ssis


【解决方案1】:

由于以下警告消息导致的 SSIS 包失败是 Microsoft Connect 网站上许多人报告的一个已知错误。

Warning: Null value is eliminated by an aggregate or other SET operation

Link to the bug report on Connect website.

微软团队关于该问题的最新更新:

This problem was resolved in SQL Server 2012 RTM (11.00.2100.60 or later).
There is no hotfix available for SQL Server 2005/2008/2008R2.

我不知道问题的原因,Microsoft 团队也已关闭此错误,因为此错误不可重现。 Connect 网站上列出的解决方法之一是在查询之前添加以下语句。请确保在末尾包含分号。

SET ANSI_WARNINGS OFF;

在 MSDN 上阅读有关 ANSI_WARNINGS 的更多信息。

【讨论】:

  • 感谢您的回复。我们知道这个解决方案。我所追求的是从 SSIS 的角度回答这两个问题。
【解决方案2】:

同样的问题,sql 2008r2。存在问题的特定数据流几个月来一直坚如磐石,没有出现任何问题。我也找不到空数据。

已验证的数据库属性“已启用 ANSI 警告”设置为 False。添加了 SET ANSI_WARNINGS OFF;到查询的开始,它起作用了。所以看起来这个错误确实忽略了数据库范围的设置。

【讨论】:

    猜你喜欢
    • 2021-10-02
    • 2019-06-07
    • 2021-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-24
    相关资源
    最近更新 更多