【问题标题】:XML Path SQL not working in SSIS 2012XML 路径 SQL 在 SSIS 2012 中不起作用
【发布时间】:2017-08-04 13:41:22
【问题描述】:

f下面的 SQL 在 2008 SSIS 包中已经运行多年:

SELECT 
BofAAcctNumber AS 'td'
,''
,ReferenceNumber AS 'td'
,''
,CheckNumber AS 'td'
,''
,CheckAmount AS 'td'
FROM dbo.bai2_CheckStatementError
    WHERE BenefitID IS NULL
FOR XML PATH('tr')

在 SSMS 中,它返回如下预期结果

<tr><td>999999999</td><td>88888888888</td><td>123456</td><td>999.00</td></tr>

在 2012 SSIS 中使用执行 SQL 任务(单行到字符串变量中)它会引发 DBNull 错误:分配给变量“User::strHTMLTable”的值的类型(DBNull)与当前变量类型不同(字符串)

欢迎各位批评指正,谢谢。

【问题讨论】:

  • 这是在执行 SQL 任务中吗?您如何将值分配给变量?
  • 是的。将 SQL 任务集为 Single Row 执行成字符串变量,谢谢
  • 在“结果集”部分,“结果名称”字段中的内容是什么?

标签: sql-server ssis for-xml-path


【解决方案1】:

在“结果集”部分的“结果名称”字段中指定“结果”并使用:

SELECT
    CAST
        (
            (
                SELECT 
                    BofAAcctNumber AS 'td'
                    ,''
                    ,ReferenceNumber AS 'td'
                    ,''
                    ,CheckNumber AS 'td'
                    ,''
                    ,CheckAmount AS 'td'
                FROM dbo.bai2_CheckStatementError
                WHERE BenefitID IS NULL
                FOR XML PATH('tr')
            )
        AS nvarchar) Result -- or nvarchar(x) - as Ann L. points out, nvarchar will truncate the string to 30 characters

(如果合适,您也可以使用varchar。)

【讨论】:

  • 谢谢你,克里斯。那行得通。非常感谢您的帮助。
  • 没问题 - 如果答案有效,请将其标记为正确。谢谢。
  • 这似乎将 xml 输出截断为 30 个字符,而我的将在 50,000 个字符附近,所以varchar(8000) 不会削减它。 SSIS 有没有其他不喜欢(max) 的方法?
  • @AnnL.,我想这将取决于您将如何处理变量 - 如果合适的话,我肯定会尝试的一件事是将变量的类型设置为 object 而不是 string -这对你有用吗?
  • 我找到了解决方案:将结果集类型更改为XML,并将其分配给String类型的变量。然后我可以将以下代码放入 SQL 任务或数据源中:DECLARE @idList varchar(max) = ?; DECLARE @xmlList xml = CONVERT(xml, @idList); 并查询我刚刚使用 nodes()value() 创建的 xml 变量,将其用作表格。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-13
  • 2012-11-30
  • 2014-02-27
  • 1970-01-01
  • 2013-07-06
相关资源
最近更新 更多