【问题标题】:SSIS SQL Task will not return results from XML columnSSIS SQL 任务不会从 XML 列返回结果
【发布时间】:2020-09-23 17:35:44
【问题描述】:

我有一个带有字符串数据类型变量的 SSIS 包。

我有一个带有 XML 字段的表,我正在尝试从该字段中获取数据并填充我的变量。我尝试了很多方法:

1.-

SELECT ISNULL(STUFF((
    SELECT ',' + wrk.CustomFieldsXML.value('(/values/MatterUNO)[1]', 'VARCHAR(MAX)') AS [text()]
    FROM Work wrk
    WHERE ISNULL(wrk.CustomFieldsXml.value('(values/ReleaseSecureMattertoFoundation)[1]', 'varchar(5)'), 'false') = 'true'
    FOR XML path('')), 1, 1, ''), '') AS 'RESULT'

2.-

DECLARE @RESULT VARCHAR(MAX)

SELECT @RESULT = ISNULL(STUFF((
    SELECT ',' + wrk.CustomFieldsXML.value('(/values/MatterUNO)[1]', 'VARCHAR(MAX)') AS [text()]
    FROM Work wrk
    WHERE ISNULL(wrk.CustomFieldsXml.value('(values/ReleaseSecureMattertoFoundation)[1]', 'varchar(5)'), 'false') = 'true'
    FOR XML path('')), 1, 1, ''), '')

SELECT ISNULL(@RESULT, '') AS 'RESULT'

3.-

SELECT wrk.CustomFieldsXML.value('(/values/MatterUNO)[1]', 'VARCHAR(MAX)') AS 'RESULT'
FROM Work wrk
WHERE ISNULL(wrk.CustomFieldsXml.value('(values/ReleaseSecureMattertoFoundation)[1]', 'varchar(5)'), 'false') = 'true'

4.-

SELECT (SELECT TOP 1 ISNULL(wrk.CustomFieldsXML.value('(/values/MatterUNO)[1]', 'VARCHAR(MAX)'), '')
FROM Work wrk
WHERE ISNULL(wrk.CustomFieldsXml.value('(values/ReleaseSecureMattertoFoundation)[1]', 'varchar(5)'), 'false') = 'true')  AS 'RESULT'

这些都会导致 2 个错误:

  1. 值类型(_ComObject)只能转换为Object类型的变量。
  2. 分配给变量的值的类型 (DBNull) 与当前类型 (String) 不同。

当我将 SQL 更改为:SELECT '988776' AS 'RESULT' 变量分配工作正常。

有谁知道这是否是使用 XML 列的限制? 有人可以帮忙吗?

谢谢 抢

【问题讨论】:

    标签: ssis


    【解决方案1】:

    来自SQL 任务Varchar(MAX) 类型的值不能直接分配给SSIS 变量。这导致了错误

    值类型(_ComObject)只能转换为Object类型的变量。

    解决方法:

    1. 返回一个更有界的数据类型,即Varchar(8000)(不超过8000)或NVarchar(4000)(不超过4000),冒着截断数据的风险。此值可由 SQL 任务 分配给您的字符串变量。
    2. 返回Varchar(MAX) 值并将其分配给对象类型变量。此外,您必须在 SQL 任务的属性中返回 Full Result set。然后,在下一步中 - 设置 Foreach 循环 枚举器,并将 0-th 列存储到变量映射中的字符串变量中。这是一个good walkthrough,说明如何执行此操作。

    第二个选项看起来有点奇怪,但确实有效。

    【讨论】:

    • 谢谢费尔迪普克斯。 varchar(8000) 解决了这个问题。我永远不会发现。非常感谢。
    猜你喜欢
    • 2023-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多