从 Measure up 得到一个练习题,不确定它是否措辞不当,或者我遗漏了有关嵌套事务的一些内容。
基本上给了我一个存储过程和状态的定义
当 sp 运行时, 的值是
@@trancount
多少?
我知道 SQL Server 只关心外部事务,但@@trancount
应该为 0,因为所有内容都已提交,如果失败,所有内容都会回滚,仍然为 0,但它告诉我应该为 1。
它没有在代码中指定@@trancount
运行的位置,但措辞建议它在 sp 执行后运行。
我最后用一些虚拟数据运行了 sp,@@trancount
得到了 0。
Create Procedure dbo.up_CreateSalesInvoice
(
@Date date,
@customerID int,
@stockItemID Int,
@quantity int,
@unitPrice decimal(8,2),
@invoiceID int out
)
As
Begin
Declare @retval int;
Begin Transaction;
Begin Try
Begin Transaction;
Insert into dbo.SalesInvoice (invoiceDate, CustomerID)
Values (@date, @customerID);
Set @invoiceID = Scope_identity();
Commit Transaction;
Begin Transaction;
Insert into dbo.SalesInvoiceLine (InvoiceID, StockItemID, Quantity,
UnitPrice)
Values (@InvoiceID, @stockItemID, @quantity, @UnitPrice);
Commit Transaction;
Commit transaction;
set @retval = 0;
End try
Begin catch
Rollback Transaction;
Set @retval = 1;
End catch
Return @retval;
End ;
预计@@trancount
为 0,因为没有可供计算的未结交易。