如何解决SSIS SQL任务将不会从XML列返回结果
我有一个带有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个错误:
- 值类型(_ComObject)只能转换为Object类型的变量。
- 分配给变量的值(dbnull)的类型与当前类型(字符串)不同。
当我将sql更改为: SELECT'988776'AS'RESULT'时,变量分配工作正常。
有人知道使用XML列是否有限制? 有人可以帮忙吗?
谢谢 罗布
解决方法
SQL任务中的类型为
Varchar(MAX)
的值不能直接分配给SSIS变量。这是导致错误的原因
值类型(_ComObject)只能转换为Object类型的变量。
解决方法:
- 返回更有限的数据类型,即
Varchar(8000)
(不超过8000)或NVarchar(4000)
(不超过4000),冒着数据被截断的风险。可以通过 SQL Task 将这些值分配给您的字符串变量。 - 返回一个
Varchar(MAX)
值并将其分配给Object类型变量。此外,您还必须在SQL Task的属性中返回Full Result set
。然后,在下一步中-设置 Foreach循环枚举数,并将第0 列存储到“变量”映射中的字符串变量中。这是good walkthrough上的操作方法。
第二个选项似乎有些奇怪,但它可以工作。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。