在我的存储过程中,我使用 #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)
请告诉我有什么解决方案。
问题不在于临时表。 问题是这个过程需要太长时间。 重新构建您的流程,以便在更可接受的时间内生成答案。
此外,您的更新语句很难阅读。 如果将字段添加到 SHCashActivity/#TempTable 中与另一个表中的字段名称匹配,它也容易受到破坏。 创建表别名并将其用于所有字段访问。
也在 #TempTable 上创建索引 X(POLNUM、模块、符号)
会有所帮助。 索引中字段的正确顺序将取决于SHCashActivity上的索引。