sql-server - 将 bcp 放入带有另一个 sql 语句的事务中

标签 sql-server tsql transactions bcp

在 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/

相关文章:

sql-server - SSIS 平面文件源行重构

sql-server - 使用 EF Core 2.1 和 SQL Server 进行正确的并发处理

tsql - 如果…ELSE…两个互斥插入INTO #temptable

sql - T-SQL : How to return 0 rows in from stored procedure, 以及如何使用 XACT_ABORT 和 TRY/CATCH

transactions - MySQL/InnoDB是否实现真正的可序列化隔离?

php - MYSQL X 带有事务的锁

sql仅按顺序的行进行分组

sql-server - SQLCMD的返回值

sql-server - 从具有外键约束的两个表中删除

python - SQLAlchemy 不返回 SQL Server 数据库中的所有表名