在我的.NET代码中,在数据库事务(使用
我试图找出是否可以在T-SQL中完成这个操作。有些人推荐OPENROWSET,但使用起来不太优雅。此外,我认为在T-SQL代码中放置连接信息是一个坏主意。
我过去使用过SQL Service Broker,但它也支持事务消息,这意味着消息直到数据库事务提交后才会发布到队列中。
我的要求:我们的应用程序存储过程由某些第三方应用程序触发,在存储过程之外启动隐式事务。我希望能够捕获和记录任何错误(在同一数据库中的数据库表中),并在我的存储过程中重新抛出异常,以让第三方应用程序回滚事务,并知道操作失败了(因此在失败的情况下执行所需的操作)。
TransactionScope
)内,我可以包含一个带有TransactionScopeOption.Suppress
的嵌套块,这可以确保即使外部块回滚,嵌套块内的命令也会被提交。
以下是代码示例:using (TransactionScope txnScope = new TransactionScope(TransactionScopeOption.Required))
{
db.ExecuteNonQuery(CommandType.Text, "Insert Into Business(Value) Values('Some Value')");
using (TransactionScope txnLogging = new TransactionScope(TransactionScopeOption.Suppress))
{
db.ExecuteNonQuery(CommandType.Text, "Insert Into Logging(LogMsg) Values('Log Message')");
txnLogging.Complete();
}
// Something goes wrong here. Logging is still committed
txnScope.Complete();
}
我试图找出是否可以在T-SQL中完成这个操作。有些人推荐OPENROWSET,但使用起来不太优雅。此外,我认为在T-SQL代码中放置连接信息是一个坏主意。
我过去使用过SQL Service Broker,但它也支持事务消息,这意味着消息直到数据库事务提交后才会发布到队列中。
我的要求:我们的应用程序存储过程由某些第三方应用程序触发,在存储过程之外启动隐式事务。我希望能够捕获和记录任何错误(在同一数据库中的数据库表中),并在我的存储过程中重新抛出异常,以让第三方应用程序回滚事务,并知道操作失败了(因此在失败的情况下执行所需的操作)。