在 tsql 的 bcp 输出命令完成其工作(导出文件)后,您通常希望随后清理源。 这通常涉及截断源表或设置记录确实已处理的标志。
如果您不清理,下一次导出当然会包括旧的和已经导出的行。
我的实验表明您不能在事务中放置 bcp。我的假设是它是一个进程外工具并且不加入发起交易(如果我错了请纠正我)。
问题是是否有可能以其他方式将这 2 个操作作为一个工作单元执行?要么一起失败,要么一起成功。
我希望有一个“post action”可以传递给 bcp,这样 bcp 本身就可以像 begaviour 一样保证交易。
谢谢你的想法,汤姆
最佳答案
这个怎么样:通过将它们的 PK id 写入处理表来标记所有行。接下来使用 xp_cmdshell 运行 BCP 并检查错误 (see this article for an example)。如果一切顺利,则使用处理表查找要删除的原始行。否则,清除该处理表,然后您就可以重试了。
关于sql-server - 将 bcp 放入带有另一个 sql 语句的事务中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10108302/