微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SSIS SQL任务将不会从XML列返回结果

如何解决SSIS SQL任务将不会从XML列返回结果

我有一个SSIS包,其数据类型为String。

我有一个带有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,''),'') AS 'RESULT'

2 .-

DECLARE @RESULT VARCHAR(MAX)

SELECT @RESULT = ISNULL(STUFF((
    SELECT ','')

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]','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]','false') = 'true')  AS 'RESULT'

每个结果都会导致2个错误

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

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

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

谢谢 罗布

解决方法

SQL任务中的类型为Varchar(MAX)的值不能直接分配给SSIS变量。这是导致错误的原因

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

解决方法:

  1. 返回更有限的数据类型,即Varchar(8000)(不超过8000)或NVarchar(4000)(不超过4000),冒着数据被截断的风险。可以通过 SQL Task 将这些值分配给您的字符串变量。
  2. 返回一个Varchar(MAX)值并将其分配给Object类型变量。此外,您还必须在SQL Task的属性中返回Full Result set。然后,在下一步中-设置 Foreach循环枚举数,并将第0 列存储到“变量”映射中的字符串变量中。这是good walkthrough上的操作方法。

第二个选项似乎有些奇怪,但它可以工作。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。