繁体   English   中英

执行SQL任务-全部结果集数据类型不匹配错误

[英]Execute SQL Task -Full Result Set Datatype Mismatch Error

我正在创建一个具有执行SQL任务的SSIS程序包,并将结果集变量传递给每个循环容器的。 我的SQL查询是:

Select distinct code from house where active=1 and campus='W'

我希望execute sql任务运行此查询并将其结果分配给一个变量,该变量将传递给每个循环容器,该循环容器应遍历结果集中的所有值。

但是我的执行sql任务失败并出现错误:

分配给变量“ User :: house”的值的类型(DBNull)与当前变量类型(String)不同

现在,我已经完成了研究,并尝试分配了变量数据类型Object,但是没有用。 我尝试在SQL查询中使用强制转换,但也无法正常工作。

由于查询返回多行和一列,因此我不确定如何为整个查询分配数据类型?

样品:

  • 增强现实
  • 国阵
  • CN

变量“ User :: house”是string,那么,您是否在结果集中使用了它?

听起来您这里有很多问题。

结果集

首先是在Execute SQL Task中,并且需要在Result Set规范和“结果集”选项卡中指定的变量的数据类型之间达成协议。 如果指定完整结果集,则接收对象的类型必须为System :: Object,并且将只有1个结果集。 使用的连接管理器(ODBC / OLE / ADO)的类型将确定如何指定它,但是在这些高级论坛上可以无限地搜索它。

其他两个选项是“单行”和“ XML”。 在使用SSIS的13年中,我从来没有理由指定XML。 剩下的就是单行。 对于单行结果集,您需要为返回的每一列提供一个变量, 并且需要正确键入。

若要更正您的问题,您需要声明第二个变量。 我通常调用rsObject(记录集对象),然后将数据类型指定为System.Object。

对于每个循环容器

然后,将为您的For Each循环容器设置一个带有“ Foreach ADO Enumerator”的枚举数,然后ADO对象的源变量将变为“ User :: rsObject”

在变量映射中,将指定变量User :: house索引为0。

测试中

给定样本源数据集,您可以验证自己的Execute SQL Task是否已将结果集正确分配给我们的对象,并且Foreach循环容器正在正确填充我们的变量。

SELECT DISTINCT
    code
FROM
(
    VALUES
        ('ABC', 1, 'w')
    ,   ('BCD', 1, 'w')
    ,   ('CDE', 0, 'w')
    ,   ('DEF', 1, 'w')
    ,   ('EFG', 1, 'x')
) house(code, active, campus)
WHERE
    active = 1
    AND campus = 'w';

如果将校园的价值从w更改为不存在的值(如f则一切将继续进行。

但是,仅当代码为NULL时,才会生成您收到的错误

向VALUES集合中再添加一个条目,例如

    ,   (NULL, 1, 'w')

当“每个循环容器”达到该值时,您将遇到指示的错误

分配给变量“ User :: house”的值的类型(DBNull)与当前变量类型(String)不同

怎么办?

SSIS变量不能更改其数据类型,除非它们属于Object类型(但这不是解决方案)。 “问题”是您不能在SSIS变量中存储NULL值(除非它是object类型)。 因此,您需要排除返回NULL的行( AND code IS NOT NULL ),或者需要将NULL强制转换为哨兵/占位符值(作为替代SELECT DISTINCT ISNULL(code, '') AS code )( SELECT DISTINCT ISNULL(code, '') AS code )。 如果一个空字符串是一个有效值,那么您需要查找的不是-“ billinkcisthegreatestever10123432”在您的代码集中不太可能存在,但是可能有点过多。

最后,考虑将SSIS变量从house重命名为code 您也许可以使事情变得简单,但是总有一天您会将这段代码移交给其他人进行维护,而又不想让他们感到困惑。

风景如画的答案https://stackoverflow.com/a/13976990/181965

您需要为结果集声明子“对象” var 结果集

然后为结果中的每个代码声明一个字符串变量

对于每个循环容器祝你好运

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM