1

从 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,因为没有可供计算的未结交易。

4

0 回答 0