我正在进行批量更新,按顺序处理记录(用户 1、用户 2 等)。每条记录都有多个与其关联的更新查询。如果单个记录(在本例中为用户)存在数据问题,我需要跳过。理想情况下,我想并行处理它们,但还没有达到那个水平(有很多挑战)。
是否可以这样做:
- 有一个交易。
- 如果出现故障,与该记录关联的语句将回滚,而不影响其他记录。
- 犯罪。
例如,我的 CSV 文件中有 4 个用户。如果 3 个是好的,1 个是坏的,则 3 个应该原子地提交(或中止);1 应该因错误而被跳过。
观察到的:
do everything for user 1;
do everything for user 2;
--> if there is failure, it rolls back the *entire* transaction
do everything for user 3;
事实上,任何错误级别 >= 16 都会回滚整个事务。
预期的:
do everything for user 1;
do everything for user 2;
--> if there is failure, roll back this *block* only
do everything for user 3;
do everything for user 4;
这是任何编程语言的正常try-catch
要求;但是,无法看到 SQL Server 等效项(涉及事务)。我读过有关检查点的内容,但不确定这是否是一个值得考虑的选项。