"Quirky Update" Where Clause Problem

  • Hi Jeff,

    Congratulations for the nice article and thanks for sharing your fantastic "Quirky Update". Very fast!

    With SQL Server 2012, I run the scripts in your article until Figure 18 without a problem. But when I run the script in Figure 19, it fails. Nothing is updated in the table TransactionDetail. Then, casually, I commented the WHERE CLAUSE and it worked. See below:

    --CODE FROM FIGURE 19 - The "Quirky Update" Running Total and Running Count

    /*************************************************************************************

    Pseduo-cursor update using the "Quirky Update" to calculate both Running Totals and

    a Running Count that start over for each AccountID.

    Takes 24 seconds with the INDEX(0) hint and 6 seconds without it on my box.

    *************************************************************************************/

    --===== Supress the auto-display of rowcounts for speed an appearance

    SET NOCOUNT ON

    --===== Declare the working variables

    DECLARE @PrevAccountID INT

    DECLARE @AccountRunningTotal MONEY

    DECLARE @AccountRunningCount INT

    --===== Update the running total and running count for this row using the "Quirky

    -- Update" and a "Pseudo-cursor". The order of the UPDATE is controlled by the

    -- order of the clustered index.

    UPDATE dbo.TransactionDetail

    SET @AccountRunningTotal = AccountRunningTotal = CASE

    WHEN AccountID = @PrevAccountID

    THEN @AccountRunningTotal + Amount

    ELSE Amount

    END,

    @AccountRunningCount = AccountRunningCount = CASE

    WHEN AccountID = @PrevAccountID

    THEN @AccountRunningCount + 1

    ELSE 1

    END,

    @PrevAccountID = AccountID

    FROM dbo.TransactionDetail WITH (TABLOCKX)

    --Where accountID = 1

    OPTION (MAXDOP 1)

    GO

    With the commented WHERE CLAUSE, the script runs in my machine in less then 1 sec.

    This problem happens with SQL Server 2014 also.

    Regards

    Iracildo

Viewing 0 posts

You must be logged in to reply to this topic. Login to reply