我有一个数据库,其中数据以某种批次进行处理,每个批次甚至可能包含一百万条记录。我正在控制台应用程序中处理数据,当我完成一个批次时,我将其标记为完成(以避免再次读取它以防它没有被删除),删除它并继续下一个批次。
我有以下简单的存储过程,它删除已处理的“批次”数据
CREATE PROCEDURE [dbo].[DeleteBatch]
(
@BatchId bigint
)
AS
SET XACT_ABORT ON
BEGIN TRANSACTION
DELETE FROM table1 WHERE BatchId = @BatchId
DELETE FROM table2 WHERE BatchId = @BatchId
DELETE FROM table3 WHERE BatchId = @BatchId
COMMIT
RETURN @@Error
我正在使用命令超时值为 10 分钟的 NHibernate,并且 DeleteBatch 过程调用偶尔会超时。
其实我不想等待 DeleteBatch 完成。我已经将该批次标记为完成,因此如果没有更多待处理的批次,我想继续处理下一个批次,或者甚至退出我的控制台应用程序。
我正在使用 Microsoft SQL Express 2012。
是否有任何简单的解决方案可以告诉 SQL 服务器 - “启动 DeleteBatch 并异步运行它,即使我断开连接,我什至不需要过程的结果”?
如果我可以为 DeleteBatch 设置较低的处理优先级,那就太好了,因为其他查询比 DeleteBatch 更重要。