【发布时间】:2014-10-14 01:00:21
【问题描述】:
请参考以下 SQL 命令,它是存储过程的一部分。存储过程创建一个名为#TREPORT 的临时表,然后我对 SODATE 列执行以下多次更新。
临时表 (#TREPORT) 有大约 100 万条记录,以下语句使性能变慢。我该如何进一步改进它?
@SDATE 和@EDATE 是参数,分别是开始日期和结束日期。
提前致谢。
UPDATE #TREPORT SET
SODATE = '1900-01-01 00:00:00.000' where #TREPORT.SODATE is NULL
UPDATE #TREPORT SET
SODATE = (SELECT TOP 1 docdate from SO200
where SO200.NUMBORIG = #TREPORT.SOPNr
AND SO200.SOTYPE = '3'
-- AND
--DOCDATE is not null and DOCDATE >= '' +CONVERT(varchar(10),@SDATE,101) +''
-- and DOCDATE <= '' +CONVERT(varchar(10),@EDATE,101) +''
)
where #TREPORT.SODATE = '1900-01-01 00:00:00.000' or #TREPORT.SODATE is NULL
UPDATE #TREPORT SET
SODATE = (SELECT TOP 1 docdate from SO100
where SO100.NUMBORIG = #TREPORT.SOPNr
AND SO100.SOTYPE = '3'
-- AND
--DOCDATE is not null and DOCDATE >= '' +CONVERT(varchar(10),@SDATE,101) +''
-- and DOCDATE is not null and DOCDATE <= '' +CONVERT(varchar(10),@EDATE,101) +''
)
where #TREPORT.SODATE = '1900-01-01 00:00:00.000' or #TREPORT.SODATE is NULL
UPDATE #TREPORT SET
RowValue = 'C' where
(#TREPORT.SODATE < '' +CONVERT(varchar(10),@SDATE,101) +''
or #TREPORT.SODATE > '' +CONVERT(varchar(10),@EDATE,101) +'')
UPDATE #TREPORT SET
RowValue = 'D' where #TREPORT.SODATE = '1900-01-01 00:00:00.000'
or #TREPORT.SODATE is NULL
【问题讨论】:
标签: performance sql-server-2008 tsql stored-procedures sql-update