【问题标题】:Row-granularity operations/error handling行粒度操作/错误处理
【发布时间】:2020-02-21 16:06:21
【问题描述】:

我已经阅读了许多关于游标如何对等效的单集查询造成巨大性能障碍的文章和帖子。

但是,使用游标,您可以对所有未出错的行成功执行所需的操作,并为每一行提供错误消息。

还有其他方法可以通过集合操作实现这种行粒度吗?

【问题讨论】:

  • 在 T-SQL 中,没有。这就是为什么 ETL 流程通常在客户端代码中执行 RBAR 验证和转换,使用批量加载方法将快乐路径数据加载到临时表中,以便通过 T-SQL 进行最终基于集合的加载。
  • @GeorgeMenoutis 。 . .这取决于操作是什么。对于数据转换,几乎从不需要游标。您确实需要游标(或类似的东西)来执行诸如在每一行上执行存储过程之类的事情。

标签: sql sql-server tsql


【解决方案1】:

不,基于集合的操作 - 正如名称告诉我们的那样 - 与集合一起工作。它将工作或失败。

在这种情况下,CURSOR(或任何其他程序方法,如 WHILE 或外部程序)可能是最佳选择。

如果性能很重要,我更愿意为第一个基于集合的导入使用容错暂存表。然后在那里执行一些质量/清理操作,以确保成功传输并将清理后的数据转移到您的目标表中(基于集合)。

这取决于数据、您的业务规则,当然还有行数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-12
    • 1970-01-01
    • 2021-12-09
    • 1970-01-01
    相关资源
    最近更新 更多