1

在我的存储过程中,我#temptable用来从一个表中获取数据并更新它#temptable以获得结果。在我的生产环境中,此存储过程消耗大量时间,有时会导致超时,但在较低的环境中,此查询绝对完美。

 CREATE TABLE #TempTable
 (
  ID int IDENTITY PRIMARY KEY,
  TOTALPOLICY nvarchar(14),
  SYMBOL nvarchar (3),
  POLNUM nvarchar (7),
  MODULE nvarchar (2),
  LOC char (2),
  MCO char (2),
  LOB char (3),
  INSUREDNAME nvarchar (100),
  TotalPremium decimal (10,2),
  ServiceCharges decimal (10,2),
  TotalPaid decimal (10,2),
  TotalRefunded decimal (10,2),
  CurrentBalance decimal (10,2),
  TotalBilled decimal (10,2),
  PCO char (2)
 )

INSERT INTO #TempTable (TOTALPOLICY,SYMBOL, POLNUM, MODULE, LOC, MCO, LOB, INSUREDNAME,TotalPremium, ServiceCharges, TotalPaid, TotalRefunded, CurrentBalance, TotalBilled, PCO) --PCR 109 SMT added PCO
       EXEC(@sql)

--PCR 109 Start SMT
Update #TempTable 
    Set TotalPaid = IsNull((Select sum(PaymentAmt) 
    From SHCashActivity with (nolock)
Where #TempTable.POLNUM = PolicyNbr 
      and #TempTable.Module = PolicyModuleNbr 
      and #TempTable.Symbol = PolicySymbolCd 
      and CashActivityTypeCd in ('P', 'C', 'N') 
      and CashAppliedStatusCd in ('1','2')), 0) 

请告诉我什么可以解决这个问题。

4

1 回答 1

1

问题不在于临时表。问题是这个过程耗时太长。重新设计您的流程,以便在更可接受的时间内生成答案。

此外,您的更新声明很难阅读。如果向 SHCashActivity/#TempTable 添加与另一个表中的字段名称匹配的字段,它也容易被破坏。创建表别名并将它们用于所有字段访问。

此外,在#TempTable(POLNUM、Module、Symbol)上创建索引 X
也会有所帮助。索引中字段的正确顺序将取决于 SHCashActivity 上的索引。

于 2012-04-26T20:05:56.663 回答