由于临时表超时

时间:2012-04-26 19:02:58

标签: sql-server stored-procedures timeout

在我的存储过程中,我使用#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) 

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

1 个答案:

答案 0 :(得分:1)

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

此外,您的更新语句很难阅读。如果将字段添加到与其他表中的字段名称匹配的SHCashActivity /#TempTable,则也很容易中断。创建表别名并将其用于所有字段访问。

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