【问题标题】:SSIS mapping to SQL Server computed columnSSIS 映射到 SQL Server 计算列
【发布时间】:2016-12-12 16:13:42
【问题描述】:

通过 Visual Studio 2015 使用 SQL Server 2014 和 SSIS。

Source 和 Destination 都是位于同一服务器上的 SQL Server db。目标表有 2 列在表中计算。

这些列的值不是通过 SSIS 的派生列功能确定的。这些列的值由目标表上的目标数据库计算。

在目标映射编辑器上,这两列的输入列设置为<ignore>.

当我运行包时,我收到一个错误,因为包试图将空值插入到计算列中。

我尝试在选中和未选中检查约束的情况下运行它。我不想取消选中 Keep Nulls 框,因为大部分源数据都是合法的 null。

关于如何加载包含计算列的表有什么建议吗?

谢谢!

【问题讨论】:

  • 我怀疑您正在尝试插入导致计算为空的值,您可能需要为计算列提取逻辑,然后将其应用于源数据,并查看哪些行结束加上返回 null 的表达式。
  • @GarethD 这是有道理的,但它似乎不是问题的原因。我正在使用一个通过 SSMS 工作的 select 语句,而不会在目标上造成任何错误。
  • @Tod Meinke 您是否尝试将目标映射中的列设置为 ? (至少那是我在 SSIS 2008 中所做的)。
  • @rafaelbattesti 是的,它们被设置为忽略。我刚刚意识到我原来的帖子忽略了ingore 标签。我刚刚修好了...
  • 如果您没有映射到这些列的任何内容,那么一定是其中定义的公式导致了错误。我从来没有遇到过在 SSIS 中插入带有计算列的表的问题(我记得不是这样)。您能否发布实际错误,因为它可能会进一步澄清问题。你也可以在列中发布他的计算

标签: sql-server ssis calculated-columns database-administration


【解决方案1】:

看到类似的东西后,我想问一下你的错误信息是否说“字符串或二进制数据会被截断”?

这不是因为在计算列中插入了 NULL,因为您将输入列设置为 <ignore>,就像在目标表中设置自动增量标识列一样。

相反,这看起来像是一个间歇性的 SSIS 错误,其中数据流中的 OLE DB 目标尝试插入具有计算列的表中,但失败了。间歇性的,因为小的变化让我出现了问题;小改动让它对你消失了。

如果您再次遇到此问题:请复制没有计算列的目标表,并通过新的 OLE DB 目标插入记录。如果这可行,您正在查看“SSIS 目标计算列错误”。

有关“字符串或二进制数据将被截断”消息所涵盖的众多问题的更多信息,请参阅https://connect.microsoft.com/SQLServer/feedback/details/339410/please-fix-the-string-or-binary-data-would-be-truncated-message-to-give-the-column-name。尽管获得了 1610 次支持,但它记录了微软 10 年来对这个问题的忽视。

更新:最简单的解决方法是在数据流的 OLE DB 目标组件中使用常规表加载而不是快速加载。这是一个已知的 Microsoft 错误,又名“BCP 和 BULK INSERT 在计算表列上失败(它们不会跳过计算列)”。

但是现在就试着点击这个链接看看你会得到什么:https://connect.microsoft.com/SQLServer/feedback/details/2779032/bcp-and-bulk-insert-fail-on-computed-table-columns-they-dont-skip-computed-columns。是的,他们已经将其“退休”以隐藏证据。

【讨论】:

    猜你喜欢
    • 2019-04-22
    • 1970-01-01
    • 1970-01-01
    • 2013-01-27
    • 1970-01-01
    • 2011-05-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多