请有人帮我写出更好的存储过程。
以下代码需要 3小时才能运行5000万条记录。
下面的USP会做一些计算,我试图只保留那些同一SKU的NEWPRICE最低的记录。
答案 0 :(得分:1)
这是存储过程中的查询:
SELECT *
FROM table1 CMS INNER JOIN
table2 CRT
ON ID = ID CROSS APPLY
--------^
(SELECT NEWS = (SPW - ((SPW * 15)/100))) AS C
如果此查询运行,则它正在执行cross join
。为什么?如果两个表中都有id
列,那么您将收到错误(有关模糊列引用的内容)。
我建议你总是使用完全限定的列名 - 也就是说,使用列来自的表的别名。
答案 1 :(得分:0)
您可以更改程序,仅返回每个NEWPRICE
SKU
CREATE PROCEDURE Usp_conditioncheck @mydate VARCHAR(50)
AS
SELECT * INTO mytable
FROM (SELECT *,
NEWPRICE =( spw - ( ( spw * 15 ) / 100 ) ),
rn = Row_number()OVER (partition BY sku ORDER BY ( spw - ( ( spw * 15 ) / 100 ) ) ASC)
FROM table1 CMS
INNER JOIN table2 CRT
ON id = id) A
WHERE rn = 1
现在只需Select
每个NEWPRICE
SKU
SELECT * FROM mytable
表
Increment