Sql 服务代理开始对话对话并发送。他们应该在交易中吗?

dan*_*mes 5 sql-server service-broker

我经常看到这样的代码:

BEGIN TRANSACTION;
BEGIN DIALOG CONVERSATION @u....
SEND ...
COMMIT;
Run Code Online (Sandbox Code Playgroud)

BOL for BEGIN DIALOG 不使用示例中的事务处理,它根本没有提到事务。

是否需要交易?如果是为什么?

RLF*_*RLF 1

您是正确的,BEGIN DIALOG CONVERSATION未指定使用 TRANSACTION 来启动 Service Broker 对话框。但许多开发人员将它们作为标准做法。

例如,2008 R2 TechNet 页面“开始对话并传输消息”似乎推荐BEGIN TRANSACTIONCOMMIT TRANSACTION(或ROLLBACK)作为良好实践。

本主题配置 Service Broker 以进行异步处理还显示了正在使用的事务。

这些使用事务的多步骤示例这样做的原因与在其他代码中使用事务的原因相同。即确保事务完整或回滚到一致状态。

当然,您可以决定您的 Service Broker 对话框是否足够简单以至于不需要事务。但这由您决定。